/*
缓冲的一个新颖的用法是实现推回(pushback)。Pushback用于输入流允许字节被读取然后返回(即“推回”)到流。PushbackInputStream类实现了这个想法。它提供了一种机制来“窥视”在没有受到破坏的情况下输入流生成了什么。
PushbackInputStream有两个构造函数:
PushbackInputStream(InputStream inputStream)
PushbackInputStream(InputStream inputStream, int numBytes)
第一种形式创建了一个允许一个字节推回到输入流的流对象。第二种形式创建了一个具有numBytes长度缓冲区的推回缓冲流。它允许多个字节推回到输入流。除了具有与InputStream相同的方法,PushbackInputStream提供了unread( )方法,表示如下:
void unread(int ch)
void unread(byte buffer[ ])
void unread(byte buffer, int offset, int numChars)
第一种形式推回ch的低位字节,它将是随后调用read( )方法所返回的下一个字节。第二种形式返回buffer缓冲器中的字节。第三种形式推回buffer中从offset处开始的numChars个字节。如果在推回缓冲器为满时试图返回一个字节,IOException异常将被引发。Java 2 对PushbackInputStream作了一些小的修改:它实现skip( )方法。
*/
// Demonstrate unread().
import java.io.*;
class PushbackInputStreamDemo{
public static void main(String[] args) throws IOException{
String s = "if (a == 4) a = 0;\n";
byte buf[] = s.getBytes();
ByteArrayInputStream in = new ByteArrayInputStream(buf);
PushbackInputStream f = new PushbackInputStream(in);
int c;
while((c=f.read()) !=-1){
switch(c){
case '=':
if((c=f.read())=='='){
System.out.print(".eq.");
}else{
System.out.print("<-");
f.unread(c);
}
break;
default:
System.out.print((char)c);
break;
}
}
}
}
分享到:
相关推荐
在Java编程语言中,`PushbackInputStream`是一个用于处理输入流的类,它提供了一种回退(或称为退格)的功能。这个类是`java.io`包的一部分,主要用于在读取数据后允许将数据“推回”到流中,以便后续的读取操作可以...
Java的I/O流分为两大类:字节流(Byte Stream)和字符流(Character Stream),并根据数据流向的不同,又可以分为输入流(InputStream和Reader)和输出流(OutputStream和Writer)。 1. 字节流 字节流主要处理字节...
- **`PushbackInputStream`**:允许数据推回。 ##### 2. 过滤器输出流 - **`DataOutputStream`**:支持写出特定格式的数据。 - **`BufferedOutputStream`**:提高写出效率。 - **`PrintStream`**:支持格式化的...
- **PushbackInputStream**:允许将已读取的字节重新推回流中,用于语法解析等场景。 ##### 3. 过滤器输出流(Filter Output Streams) - **DataOutputStream**:提供对输出流的高级访问,如写入基本数据类型。 - **...
- `PushbackInputStream`: 允许将一个或多个字节推回输入流的前端。 - `FileInputStream`: 用于从文件中读取字节。 - `ByteArrayInputStream`: 用于从字节数组中读取数据。 - `PipedInputStream`: 用于管道通信...
- `PushbackInputStream`:允许将一个字节压回输入流。 - **字符流过滤器**: - `BufferedReader`:为字符流提供缓冲机制,提高读取效率。 - `LineNumberReader`:记录字符流中行号的位置。 - `PushbackReader`...
- **`PushbackInputStream`**:允许将一个或几个读取的字节放回输入流中。 ##### 2. FilterOutputStream及其子类 - **`DataOutputStream`**:用于向`OutputStream`写入基本数据类型。 - **`BufferedOutputStream`*...
- **PushbackInputStream**:允许将数据重新推回到流中。 - **FilterOutputStream**:类似于FilterInputStream,但用于输出流。 - **DataOutputStream**:提供了向流中写入基本数据类型的功能。 - **...
- 特殊子类如`LineNumberInputStream`、`DataInputStream`、`BufferedInputStream`、`PushbackInputStream`等,提供额外功能如行号追踪、数据格式读取优化、缓冲区读取和数据回退等。 - **OutputStream**:用于...
InputStream和OutputStream是所有字节输入流和输出流的基类,包括FileInputStream和FileOutputStream,它们专门用于文件操作。 2. **FileInputStream**:这是字节输入流的一个具体实现,用于从文件读取原始字节。...
- **PushbackInputStream**:允许将已经读取的某个字节重新推回到流中。 ##### 2. 过滤输出流 - **DataOutputStream**:为基本数据类型如int、char等提供写入功能。 - **BufferedOutputStream**:与`...
流分为输入流和输出流,根据处理的数据单位又分为字节流(处理字节数据)和字符流(处理字符数据)。 2. **字节流**: - **InputStream** 和 **OutputStream** 是所有字节输入流和输出流的基类。例如,...
- `SequenceInputStream`可以从多个`InputStream`读取数据,将它们视为单个输入流。 **4. `ByteArrayInputStream` 和 `ByteArrayOutputStream`** - `ByteArrayInputStream`从一个字节数组中读取数据。 - `...
在给出的选项中,`InputStreamReader`是面向字符的输入流。 #### 4. Thread类的方法 **题目:** 下面哪些是Thread类的方法? **选项:** - A: start() - B: run() - C: exit() - D: getPriority() **答案:** A: ...
`UnicodeInputStream`是一个过滤输入流,它的主要任务是检测并移除文件头中的BOM标志。`UnicodeReader`则是在`BufferedReader`基础上扩展的,用于处理不同类型的Unicode编码,包括那些带有BOM的编码。 在`...
- `SequenceInputStream`:合并多个输入流。 - `FilterInputStream` 和 `FilterOutputStream`:用于过滤和增强其他输入输出流的功能。 - `DataInputStream` 和 `DataOutputStream`:用于读写基本数据类型。 - `...
这可以通过工厂方法实现,如示例代码所示,首先检查输入流是否支持mark和reset方法,然后根据文件头信息创建正确的Workbook实例。 ```java public static Workbook createCommonWorkbook(InputStream inp) throws ...
- Scanner类的作用:从输入流读取数据。 - Scanner类的常用方法:nextInt()、nextLine()等。 - **数据操作流** - 数据操作流的作用:以数据类型的形式读写数据。 - DataInputStream与DataOutputStream类。 - **...