当前位置: 代码迷 >> J2SE >> 小初学者请问大侠几个流有关问题
  详细解决方案

小初学者请问大侠几个流有关问题

热度:82   发布时间:2016-04-24 01:45:00.0
小菜鸟请教大侠几个流问题
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能分辨出来,这样中英文字符就能“混合着”读出来了。。仅供参考哈
  相关解决方案