`
xyheqhd888
  • 浏览: 404242 次
  • 性别: Icon_minigender_1
  • 来自: 秦皇岛
社区版块
存档分类
最新评论

字符流

 
阅读更多

一、字符流:

    1. java.io.Reader和java.io.Writer与其子类等是处理字符流(Character Stream)的相关类。简单地说,就是对流数据以一个字符(两个字节)的长度为单位来处理(0--65535,0x0000--0xffff),并进行适当的字符编码转换处理,即Reader、Writer与其子类可以用于进行所谓纯文本文件的字符读/写。

    2. Reader和Writer类支持Unicode标准字符集,字节流只支持ISO-latin-1 8-bit。在处理流数据时,会根据系统默认的字符编码来进行字符转换,Reader和Writer是抽象类,在进行文本文件的字符读写时真正会使用其子类,子类通常会重新定义相关的方法。

    3. Reader 的子类InputStreamReader转换读入的两个字节为中文字符的示例:

package ysu.hxy;
 
import java.io.*; 
 
public class ReaderDemo {
    public static void main(String[] args) {
        try { 
            PushbackInputStream pushbackInputStream = 
                new PushbackInputStream( 
                         new FileInputStream(args[0])); 
            byte[] array = new byte[2]; 
            int tmp = 0; 
            int count = 0; 

            ByteArrayInputStream byteArrayStream = new ByteArrayInputStream(array);

			//reader会从已读的位数组中取出数据
			InputStreamReader reader = new InputStreamReader(byteArrayStream);

            while((count = pushbackInputStream.read(array))
                                             != -1) {
               // 两个字节转换为整数 
                tmp = (short)((array[0] << 8) | 
                      (array[1] & 0xff)); 
                tmp = tmp & 0xFFFF; 
 
                 // 判断是否为BIG5,如果是则显示BIG5中文字
                if(tmp >= 0xA440 && tmp < 0xFFFF) {
                    System.out.println("BIG5: " + 
                            (char)reader.read());

				 //重置ArrayInputStream的读取光标,下次reader才会再从头重新读取数据
				 byteArrayStream.reset();
                } 
                else { 
                   // 将第二个字节推回流 
                    pushbackInputStream.unread(array, 1, 1); 
                    // 显示ASCII范围的字符
                    System.out.println("ASCII: " + 
                            (char)array[0]); 
                } 
            } 
 
            pushbackInputStream.close(); 
        } 
        catch(ArrayIndexOutOfBoundsException e) {
            System.out.println("请指定文件名称");
        }
        catch(IOException e) { 
            e.printStackTrace(); 
        } 
    }
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics