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

我使用以下代码获取文件内容,文件大概为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的方法快速读取呢。
最新回答
芳香的流年

2024-12-02 06:58:19

关键是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);
}
无心

2024-12-02 08:03:56

我觉得这程序 没有问题啊。