java使用byte数组,通过FileInputStream读取文件时出现的bug

我使用以下代码获取文件内容,文件大概为5.4MFileInputStreamfis=newFileInputStream(Filename);Stringxml="";b... 我使用以下代码获取文件内容,文件大概为5.4M

FileInputStream fis = new FileInputStream(Filename);

String xml = "";

byte[] b = new byte[1024*1024];
while (fis.read(b,0,b.length)!=-1) {
xml += new String(b);
}

当我打印xml或者输出到文件时,发现,xml并没问完全输出,输出断绝的地方,源文件是:

<reporter name="Ma Wenjing">mawj0517@

经上述读取再输出之后,文件最末尾停在:

<reporter name="Ma Wenjing">mawj0

这后面的大概一两百行文件内容也没有输出成功。

请问,是否这是因为mawj0517里面的5这个字服在byte情况下,读进来导致了fis.read(b,0,b.length)!=-1这个条件不满足了而无法继续读下去了吗?请问我应该怎样修改才行呢。

PS:
谢谢一楼的建议,我现在就是使用BufferedReader来读FileReader,然后使用readLine,读5.4M大小的xml文件,时间居然将近1个小时。
我就使用1M为单位的空间通过byte数组来读,几乎一秒不到就读好了,但是读取并不完整。缺了最后的几百行。
另外:我直接使用read(b)也是一样的错误。

请问有没有人能介绍一个不使用readLine的方法快速读取呢。
展开
 我来答
超级奶爸头子
推荐于2016-04-20 · TA获得超过668个赞
知道小有建树答主
回答量:1111
采纳率:0%
帮助的人:604万
展开全部
关键是fis.read(b,0,b.length)这句,如果你的总体的内容长度不能整除b.length那么它会把一些空字符串塞满这次b。导致b读取的内容就不对了。
因为FileInputStream这个类的read方法返回的是一个整型值。不好操作
建议你这么写:
BufferedReader br = new BufferedReader(new FileReader("test.txt"));
String xml = "";
StringBuilder total = new StringBuilder("");
byte[] b = new byte[1024];

while ((xml = br.readLine())!=null) {

total.append(xml);
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
czqname
2011-10-09 · TA获得超过224个赞
知道小有建树答主
回答量:139
采纳率:100%
帮助的人:166万
展开全部
我觉得这程序 没有问题啊。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式