java 用FileInputStream中read方法读取文件出现乱码

2024-11-27 07:28:43
推荐回答(3个)
回答1:

while(is.read()!=-1){
    b[i]=(byte) is.read();
    i++;
}

这里是错的,当判断is.read() != -1的时候这个字节就已经被读取了,于是b[i] = (byte) is.read();这里读取的就是后面一个字节,自然会乱码。解决方法如下:

byte c = (byte)is.read();
while(c != -1){
    b[i] = c
    i++;
    c = (byte)is.read();
}

还有一种更方便的:

byte[] b = new byte[is.available()];
is.read(b);

回答2:

read方法读取的是字节流(每次读取一个字节),如果是中文,就是两个字节,就会出现乱码的。
可以通过BufferedReader 流的形式进行流缓存,之后通过readLine方法获取到缓存的内容。
BufferedReader bre = null;
try {
String file = "D:/test/test.txt";
bre = new BufferedReader(new FileReader(file));//此时获取到的bre就是整个文件的缓存流
while ((str = bre.readLine())!= null) // 判断最后一行不存在,为空结束循环
{
System.out.println(str);//原样输出读到的内容
};
备注: 流用完之后必须close掉,如上面的就应该是:bre.close(),否则bre流会一直存在,直到程序运行结束。

回答3:

额,仔细看了下,你用int来接本来就不对。byte和int是不同的

byte是1字节,int是4字节。。。。