`
=死神=
  • 浏览: 58000 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java 位流处理4

    博客分类:
  • Java
阅读更多

PushbackInputStream

    java.io.PushbackInputStream拥有一个PushBack缓冲区,从PushbackInputStream读出数据后,只要PushBack缓冲区没有满,就可以使用unread()将数据推回流的前端

 

    举个使用 PushbackInputStream的例子。假设一个文本文件中同时存储有ASCII码范围的英文字符与BIG5码范围的中文字符。您希望判断出哪些 位置是ASCII而哪些位置是BIG5中文字符的位置,BIG5中文字符使用两个字节来表示一个中文字,而ASCII只使用一个字节来表示英文字符

 

 

    BIG5中文为了与ASCII兼容,低字节范围为0xA4~0xF9,而高字节为0x40~0x7E以及0xA1~0xFE。存储时低字节先存,再存高字节,所以读取时只要先读到字节是在0xA4~0xF9,就表示它可能是一个中文字的前半数据。

 

    为了说明 PushbackInputStream的功能,在范例14.15中一次从文件中读取两个字节,并检查两个字节合并后的整数值是否在0xA440与 0xFFFF之间,这样可以简单地判断其两个字节合并后是否为BIG5码。如果是BIG5码则使用这两个字节产生String实例以显示汉字字符;如果不 在这个范围之内,则可能是个ASCII范围内的字符,您可以显示第一个字节的字符表示,并将读出的第二个字节推回流,以待下一次可以重新读取

 

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PushbackInputStream;

public class PushbackStreamDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		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 {
					// 将第二个字节流推回
					if (count == 2) {
						pushbackInputStream.unread(array, 1, 1);
					}
					// 显示ASII范围的字符
					System.out.println("ASCII:" + (char) array[0]);
				}

			}
			pushbackInputStream.close();
		} catch (ArrayIndexOutOfBoundsException e) {
			System.out.println("请指定文件名称");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

 

假设指定的文本文件test.txt中有以下的文字:这T是e一s个t测试。则执行的结果如下:

java onlyfun.caterpillar. PushbackStreamDemo test.txt

BIG5: 这

ASCII: T

BIG5: 是

ASCII: e

BIG5: 一

ASCII: s

BIG5: 个

ASCII: t

BIG5: 测

BIG5: 试

 

源文件地址:http://hi.baidu.com/mdbing/blog/item/c477a338d81009c7d56225fb.html

分享到:
评论
1 楼 LinuxFans 2009-05-14  
请问LZ,简体中文就是大陆使用的你上面的也使用吗?

相关推荐

    基于Java的视频流处理(原创)

    在本项目中,"基于Java的视频流处理(原创)"是一个使用Java技术进行实时视频流处理的应用。这个项目的核心是实现一个基本的哈哈镜效果,并结合了第三方库来完成人脸检测以及对人脸的图像遮挡功能。在创新实践项目课...

    java零基础自学 之 JavaIO流处理

    字节流处理8位的字节,适用于二进制文件,如图片、音频等。 2. **IO类的分类** Java的IO类主要分为两大类:字符流(Reader和Writer)和字节流(InputStream和OutputStream)。Reader和Writer是字符流的基类,...

    Java字符流与字节流区别

    Java 内用 Unicode 编码存储字符,字符流处理类负责将外部的其他编码的字符流和 java 内 Unicode 字符流之间的转换。而类 InputStreamReader 和 OutputStreamWriter 处理字符流和字节流的转换。字符流(一次可以处理...

    Java的异常处理和IO流

    Java的异常处理与IO流是Java编程中两个重要的概念,它们在软件开发中扮演着至关重要的角色。本文将深入探讨这两个主题,以便更好地理解和应用它们。 ### 一、Java异常处理 #### 1.1 什么是异常 异常是指在程序...

    java实现流媒体播放

    最后,Java流媒体播放程序应具备良好的错误处理机制,如网络中断后的恢复、媒体文件格式不支持时的提示等。同时,考虑到不同的操作系统和硬件环境,程序还需要考虑跨平台的兼容性。 总的来说,Java 实现流媒体播放...

    基于red5 dsj 的java 处理视频流和一些疑问

    4. **视频流处理**:如何通过Java处理视频流,包括解码、编码、帧处理、时间同步等技术。 5. **问题与解答**:博主在实践过程中遇到的问题,例如性能优化、兼容性问题、流同步问题等,以及解决问题的方法和技巧。 ...

    java数据流总结

    java数据流总结,java io流总结,节点流和处理流 java数据流总结,java io流总结,节点流和处理流 java数据流总结,java io流总结,节点流和处理流

    java_io流的处理

    ### Java IO流处理详解 #### I/O流概述 在Java编程中,输入/输出(I/O)处理是一项核心技能,涉及从键盘读取数据、向屏幕输出数据、从文件读写数据以及在网络连接上进行读写操作。Java将这些不同的输入输出源抽象...

    java 视频流读写

    Java 视频流读写是Java编程中涉及多媒体处理的一部分,主要目的是为了在应用程序中处理、播放或存储视频数据。Java Media Framework (JMF) 是Java平台上的一个关键组件,用于处理音频、视频和流媒体内容。在这个"JMF...

    Java中文件IO流.pdf

    Java 中文件 IO 流 Java 中文件 IO 流是指 Java 语言中对文件的输入输出操作,通过定义文件流来实现文件的读写...在 Java 中,文件 IO 流操作是非常重要的,掌握文件 IO 流操作可以帮助我们更好地处理文件相关的任务。

    Java字符流和字节流

    字节流处理的是8位的字节数据,而字符流处理的是16位的Unicode字符。这两种流都有各自的特点和应用场景。 #### 二、字节流 字节流是最基本的数据传输方式,适用于任何类型的数据传输。在Java中,所有字节流类都是`...

    IO流 javaio java 流

    字符流处理单个字符,而字节流处理8位的字节序列。它们又可以进一步细分为输入流(InputStream/Reader)和输出流(OutputStream/Writer),分别用于数据的读取和写入。 1. 字节流: - 字节输入流(InputStream):...

    Java流(文件读写操作)

    ### Java流(文件读写操作) #### 一、流的分类 Java中处理文件和数据时,使用流的概念来进行操作。根据不同的标准,流可以分为几种类型。 ##### 1. 按数据流动方向 - **输入流**:主要用于从数据源读取数据。输入...

    JAVA IO流技术

    4. Java流的细分: - 流的方向:输入流用于从数据源读取数据,输出流用于向目标写入数据。 - 处理数据单元:字节流按字节进行读取(InputStream、OutputStream),字符流按字符进行读取(Reader、Writer)。 - ...

    java输入输出流与文件处理

    字节流适用于处理二进制数据,而字符流更擅长处理文本数据,两者的区别在于数据处理的基本单位,字节流处理的是8位的数据,而字符流处理的是16位的Unicode字符。 #### 总结 Java的输入输出流与文件处理机制为...

    JAVA对音频文件处理程序

    在Java编程语言中,处理音频文件是一项常见的任务,特别是在多媒体应用、游戏开发或者音视频处理系统中。本项目“JAVA对音频文件处理程序”聚焦于读取音频文件,执行降分贝操作,然后将处理后的音频保存为新的文件。...

    java_IO流的处理.ppt

    Java IO流处理是Java编程中一个非常重要的概念,它用于在不同数据源之间传输数据,如文件、网络、内存等。在Java中,IO流分为两大类:输入流(Input Stream)和输出流(Output Stream),它们分别用于数据的读取和...

    java数据流的概述

    字节流处理的是8位的字节数据,适用于所有类型的数据,包括图像、音频等二进制文件。而字符流处理的是16位的Unicode字符,更适合文本数据的处理。在Java.io包中,这两类流都提供了输入流和输出流接口,用于读取和...

    基于Java的流媒体视频直播服务器设计与实现

    本项目聚焦于“基于Java的流媒体视频直播服务器设计与实现”,这涉及到多个IT领域的知识,包括音视频处理、服务器架构、Java编程以及运维等。 首先,我们要理解流媒体的概念。流媒体是指在互联网上传输的连续多媒体...

Global site tag (gtag.js) - Google Analytics