java io读取流过程中打印读入的字节数组为什么会出现方框呢

如果说打印字节数组,为空的地方用方框填充,也不对啊。为什么读取流的时候,为空的地方就用方框填充呢,不明白问题,可以@我。求解啊。。。。对了说明下。这个aa.txt没有中文... 如果说打印字节数组,为空的地方用方框填充,也不对啊。为什么读取流的时候,为空的地方就用方框填充呢,不明白问题,可以@我。求解啊。。。。
对了说明下。这个aa.txt没有中文特殊字符只有一行aaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 53个字符
展开
 我来答
转身_lfj
2013-11-21 · TA获得超过356个赞
知道小有建树答主
回答量:127
采纳率:50%
帮助的人:69.8万
展开全部
编码问题,方框显示的是乱码。
因为记事本、editplus,notpad++等这些软件打开文本之后的默认编码是不一样的,你代码里面有转码操作,如果编码转换的不对就会出现乱码。

当然,文本里面的tab符,制表符等,在转码的时候也是不一样的。
而且java在处理UTF-8的编码的时候也会有bug存在,开发中一种通用的处理编码问题的方法就是用记事本打开,然后另存为,选择Unicode,保存。然后再转码基本就没有问题了
更多追问追答
追问
我新建的最简单的文件,保存为utf-8,里面就4个字符abcd,打印一样的结果啊。代码一样。我用for循环打印这个byte数组,打印到没值的时候就没有值了。不是乱码问题。
追答
噢,是我没仔细看你的代码,你的代码里面声明了一个byte[1024],你这个byte大小是1024,所以你打印的方框是因为里面没有内容,也就是说,byte放置了你读取的内容之后,剩下的空间。
当年的反应慢
2013-11-21 · TA获得超过637个赞
知道小有建树答主
回答量:612
采纳率:50%
帮助的人:375万
展开全部
你的aa.txt是用GBK或者GB2312编码的吗?方框意味着乱码。UTF-8这种编码格式每个字的字节数不同,有两个字节的有三个字节的,你把每个字节都打印出来,就有可能把一个字拆开了,所以会乱码
追问
内容只有aabb。任何编码都应该只占一个字节的啊。其他编码我试过了。。一样的,我觉得不像是乱码问题,按常理这些方框为空才对,就是木有啊。为什么会用方框占据呢,如果说打印字节数组为空的地方用方框占据,那为什么我上面第一行只打印a而不是a后面补方框呢,刚我遍历了下这个字节数组,它打印完第53个字符,后面的方框都是空字符串。没打印。
追答
我只能说是你转换的时候出了问题,你可以直接打印一下sb,应该没有框。在转化的时候,后面的空字符也被转换成UTF-8的格式了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
artintin
2013-11-21 · TA获得超过1.2万个赞
知道大有可为答主
回答量:7508
采纳率:80%
帮助的人:2862万
展开全部
sb定义成1024的长度,
前面的in.read(sb,0,53)只是将读入的53个字符放到sb的钱53个字符中而已,
sb还是1024长度,你需要人为截断。

String s=new String(sb,"UTF-8");
//System.out.println("s.length="+s.length());
System.out.println("s.length="+s.substring(0,an));
更多追问追答
追问
目的不在于获取文件的内容,获取文件的值我可以通过BufferReader,也可以初始字节数组的时候把长度定义成in.available().,我只是搞不懂。为什么后面打印为方框呀。
追答
sb的长度一直是1024长度
new String(sb,"UTF-8")返回的也是一个1024位长度的字符串,
除了前面53个已知字符外,后面的全是空值,打印出来就是方框。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式