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);
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流会一直存在,直到程序运行结束。
额,仔细看了下,你用int来接本来就不对。byte和int是不同的
byte是1字节,int是4字节。。。。