import java.io.*;
public class InputStreamTest
{
public static void main(String[] args)
{
//先创建一个输入流;
FileInputStream fis = null;
//记录字节长度;
int hasRead = 0;
//声明一个字节数组来存字节。
byte buff[] = new byte[1024];//换成3读就会出现乱码
try
{
//为流类赋值;
fis = new FileInputStream("InputStreamTest.java");
//开始循环读取内容了;
while((hasRead = fis.read(buff)) > 0)
{
System.out.print(new String(buff));
}
}
catch(IOException e)
{
e.printStackTrace();
}
finally(finally应该放哪呢,放这里老报错)
{
if(fis != null)
fis.close();//close()本身就抛出异常;
}
}
}
问题:流是怎么实现读取的。如果我把1024改成3那么到中文时就会出现乱码,字节读取时是读满三个然后转换一次,遇到中文是不是要读2次才合成一个中文,
还有如果我把它换成字符流,一个不是就能读2个英文,可是为什么不是呢,求解,书上说有什么指针。
------解决方案--------------------
中文字符是两个字节的。你改成3当然会报错。
你代码还少了个括号,异常没有处理。
- Java code
package com.walkman.exercise.one;import java.io.*;public class InputStreamTest { public static void main(String[] args) { // 先创建一个输入流; FileInputStream fis = null; // 记录字节长度; int hasRead = 0; // 声明一个字节数组来存字节。 byte buff[] = new byte[1024];// 换成3读就会出现乱码 try { // 为流类赋值; fis = new FileInputStream("InputStreamTest.java"); // 开始循环读取内容了; while ((hasRead = fis.read(buff)) > 0) { System.out.print(new String(buff)); } } catch (IOException e) { e.printStackTrace(); } finally {// (finally应该放哪呢,放这里老报错) if (fis != null) try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } }}
------解决方案--------------------
中文字符、英文字符都是“一个字符”,只不过占用空间不一样,你设置好编码格式,java能分辨出来,这样中英文字符就能“混合着”读出来了。。仅供参考哈