关于Java里面String类型长度的问题,之前一直存在一个错误的理解,那就是控制台没有输出完,不代表String类型装不下那么多数据。
按照我的猜测,在控制台里输出,比如在安卓开发中使用Log.i输出,控制台缓冲大小是有限制的,也就是说,一个长字符串在控制台输出被截断。存在两种可能,一是字符串真的炸了。而是控制台缓冲区炸了。
为了验证这个问题,我将一个从服务器返回的Json字符串使用Log.i直接输出到控制台中,大小被截断了,和在浏览器上返回的结果差距甚远。难道是控制台单行缓冲区不够?好吧,我生气了啊!我将这个超长字符串做分割处理,超长是多长?下一段肯定会讲到的!怎么分割呢?我利用String.substring方法,把字符串分割成单个长度为50的子段,然后再一个一个的输出,我也不知道有多长!!!然后我去,程序依然炸了,连个异常都没有抓到!现在我的猜测是我用来截断的变量是int,可能那个字符串的长度超过int的表示范围了,当然这只是猜测,还没有用其他类型进行进一步验证。好吧,在控制台输出算是失败了!!!!
文件流来一波试一下!File file = new File("test.txt")。新建一个对象很有必要的啊,毕竟我没女朋友。当然,在安卓开发里面,存取文件要复杂一下,没有PC上那么单纯。好了,这又不是重点,能保存就行了。接着,重点来了!我获取了一个这个文件相关的PrintWriter对象。具体方法PrintWriter writer = new PrintWriter(file)。接着,这个很关键啊,很能说明我对字符串的偏见。我将那个从服务器返回的东东直接塞进一个字符串,然后把这个字符串用writer直接添加到文件里面,方法如下writer.append(s),这个s就是那个不知道炸没有炸的字符串。接着writer.flush(),writer.close()。刷新缓冲区,关闭writer。激动人心的一刻来了,文件夹下有测试文件了。看一下大小,32KB。哦豁,有点大也!点开一看,和浏览器返回的结果一模一样啊!妈的智障!
说明了什么,控制台就是智障,它输出不了的工具。不代表String装不下!!!被骗了吧,什么控制台!!!!!!
好了,写完收工!每天把问题和辛苦历程记下来,这个是规矩,不能破哟,坚持下去!
0:22
网友评论