pushbackInputStream
来源:互联网 发布:我阿祖是自愿的 知乎 编辑:程序博客网 时间:2024/06/04 17:54
1. java.io.PushbackInputStream拥有一个PushBack缓冲区,从PushbackInputStream读出数据后,只要PushBack缓冲区没有满,就可以使用unread()将数据推回流的前端。
2. 假设一个文本文件中同时存储有ASCII码范围的英文字符与BIG5范围的中文字符。想要判断那些位置是ASCII而哪些位置是BIG5中文字符,BIG5中文字符使用两个字节来表示一个中文字,而ASCII只使用一个字节来表示英文字符。
3. Big5中文为了与ASCII兼容,低字节范围内0xA4-0xF9,而高字节为0x40--0x7E以及0xA1--0xFE。存储时低字节先存,再存高字节,所以读取时只要先读到字节是在0xA4--0xF9,就表示它可能是一个中文字符的前半数据。
4. 下面的范例说明PushbackInputStream的功能,一次从文件中读取两个字节,并检查两个字节合并后的整数值是否在0xA440--0xFFFF之间,这样可以简单地判断其两个字节合并后是否为BIG码。如果是BIG5码则使用这两个字节产生String实例以显示汉字字符;如果不在这个范围之内,则可能是个ASCII范围内的字符,您可以显示第一个字节的字符表示,并将第二个字节推回流,以待下一次可以重新读取。
- package ysu.hxy;
- import java.io.*;
- public class PushbackInputStreamDemo
- {
- 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;
- 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:" + new String(array));
- }
- 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();
- }
- }
- }
package ysu.hxy;import java.io.*;public class PushbackInputStreamDemo{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;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:" + new String(array));}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();}}}
不过这段代码好象有问题:当test.txt里面内容是:a这y是c 时,运行结果如下:
ASCII: a
BIG5: 这
ASCII: y
BIG5: 是
ASCII: c
BIG5: 乔
- pushbackInputstream
- pushbackInputStream
- PushbackInputStream
- PushbackInputStream
- PushbackInputStream
- PushbackInputStream
- PushBackInputStream
- 小议PushbackInputStream
- PushbackInputStream类
- PushbackInputStream理解
- PushbackReader,PushbackInputStream
- PushbackInputStream, 用法
- javaI/O之PushbackInputStream
- Java IO--回退流PushbackInputStream
- IO-PushBackInputStream、ObjectInputStream、ObjectOutputStream
- PushbackInputStream简介及用法
- javaI/O之PushbackInputStream
- Java IO - PushbackInputStream&PushbackReader
- 虚函数的作用
- CString类所有成员函数详解
- 使用OpenGL中的GLUT
- 怎样迁移opencms
- Chrome15/IE9/Firefox8/Opera11/Safari5兼容性评测,Chrome完胜
- pushbackInputStream
- can't create transaction lock on /var/lock/rpm/transaction
- Loading module "oracleasm": Unable to load module "oracleasm"
- php魔术方法
- 如何根据http请求信息区分访问用户的国家、语言信息
- C语言/C++中怎样产生随机数
- 数据库连接池(2)
- 通过串口和AT指令来发送短信
- 四种进程或线程同步互斥的控制方法