Java字节流与字符操作小结

  常常会用到Java中的文件操作,先看下面的表:

 

字节流

字符流

输入

InputStream

Reader

输出

OutputStream

Write

  字节流的底层是InputStreamOutputStream,文件操作继承于此,读/写分别为:FileInputStreamFileOutputStream,可以对任何类型的文件进行操作。以读文件为例:

  FileInputStream fin=new FileInputstream(fileName); //打开文件进行操作

  Java给出了几种read()方法:

  1、int read(); 此输入流中读取一个数据字节,文件结束则返回-1

    int ch=fin.read();返回内容的数字形式,常常用Integer.toHexString(ch)来查看内容的十六进制形式

  2、int read(byte []); 读入byte数组中,返回实际读到的字节数,可能小于数组的长度;

    byte []temp=new byte[16];

    int length=fin.read(temp);

    结果length<=16;

  3、int read(byte[] b, int off, int len);从此输入流中将最多 len 个字节的数据读入一个 byte 数组中

  另外提供了一个long skip(long n)函数,丢弃字节流中的前n个字节,这个在随机文件读写中非常有用(多线程下载,文件分割等)。

 

  常常用另一种形式来操作文件,BufferedInputStream,基于缓冲的字节操作,底层需要包含FileInputStream来实现,如:

BufferedInputStream br=new BufferedInputStream(new FileInputStream(fileName));具体操作参考前面。

 

  对于文本操作,字符相对方便一点,也能直观显示文件内容

  FileReader读取文件操作,read()方法也与前面一致

  int ch=fr.read();返回字符的数字形式

  强制转化后还原成原来的字符,char(ch) 

  FileWirter fw几种常用的形式:

  write(int ch);

  write(String str);

  write(char []buff);

  write(char []buff, int startIndex,int num);

  write(String str, int startIndex,int num);

 

 

InputStreamReader字节流到字符流转换的桥梁

  public InputStreamReader(InputStream in);

  Reader和Writer类允许用户在程序中无缝的支持国际字符集,如果要读取的文件是别国语言,要使用字符流。

  字节流是一个字节一个字节的输入/输出数据(两个字节组成一个汉字)所以在用字节流读一串汉字时会出现乱码问题,可采用字符流进行读取。 

同样字符流是一个字符一个字符的输入/输出数据(一个字符=两个字节)所以用字符流读一串汉字可以解决乱码问题,同时它也兼顾了英文,这是由unicode的编码规则决定的,因为中文的unicode字符有特殊标识。 

  读取:

  BufferedReader br= new BufferedReader(new InputStreamReader(new FileInputStream(File file), "UTF-8")); 

  从键盘获得输入:

  BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 

  写入:

  BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(File file), "UTF-8"));

 

posted on 2012-11-20 22:00  CodeAnt  阅读(321)  评论(0编辑  收藏  举报