mark就像书签一样,在这个BufferedReader对应的buffer里作个标记,以后再调用reset时就可以再回到这个mark过的地方。mark方法有个参数,通过这个整型参数,你告诉系统,希望在读出这么多个字符之前,这个mark保持有效。读过这么多字符之后,系统可以使mark不再有效,而你不能觉得奇怪或怪罪它。这跟buffer有关,如果你需要很长的距离,那么系统就必须分配很大的buffer来保持你的mark。
//eg.
//reader is a BufferedReader
reader.mark(50);//要求在50个字符之内,这个mark应该保持有效,系统会保证buffer至少可以存储50个字符
int a = reader.read();//读了一个字符
int b = reader.read();//又读了一个字符
//做了某些处理,发现需要再读一次
reader.reset();
reader.read();//读到的字符和a相同
reader.read();//读到的字符和b相同
例子:
public static void main(String[] args) throws IOException {
String s = "This is a &aa not.\n";
byte buf[] = s.getBytes();
ByteArrayInputStream in = new ByteArrayInputStream(buf);
BufferedInputStream f = new BufferedInputStream(in);
int c;
boolean marked = false;
while ((c = f.read()) != -1) {
switch (c) {
case '&':
if (!marked) {
f.mark(1);// 为什么mark里放任何值结果都一样
marked = true;
} else {
marked = false;
}
break;
case ' ':
if (marked) {
f.reset();
System.out.print("&");
} else
System.out.print((char) c);
break;
default:
if (marked)
System.out.print((char) c);
break;
}
}
}
分享到:
相关推荐
Java 中的 IO 流详解 Java 中的 IO 流是指在 Java 语言中对输入输出操作的抽象,主要用于实现程序与外部设备和其他计算机之间的交流,尤其是对磁盘文件的操作。IO 流的概念是在 1984 年由 C 语言第一次引入的,后来...
Java IO、NIO以及NIO.2是Java中用于处理输入/输出操作的三种主要机制。本书《Java IO, NIO and NIO.2》旨在深入浅出地介绍这些机制,同时书中内容均为英文。接下来将详细介绍这些知识点。 **Java IO** Java IO是...
Java IO流处理是Java编程中一个非常重要的概念,它用于在不同数据源之间传输数据,如文件、网络、内存等。在Java中,IO流分为两大类:输入流(Input Stream)和输出流(Output Stream),它们分别用于数据的读取和...
Java IO 输入输出处理是Java编程中至关重要的一部分,用于在程序和外部资源(如磁盘、网络、内存等)之间传输数据。Java的IO系统由java.io包提供,它包含了一系列的类和接口,用于实现不同类型的输入输出操作。 **...
Java IO流是Java编程语言中一个非常重要的概念,它提供了数据传输和转换的机制,使得程序可以读取、写入各种类型的数据,如文件、网络、内存缓冲等。在Java第4章中,我们通常会深入学习IO流的体系结构、分类、基本...
- **3.7 标记和重置**:`mark()`和`reset()`方法允许程序记住流的位置,并能够在之后重置到该位置。 - **3.8 自定义InputStream子类**:通过继承`InputStream`类可以创建自定义的输入流实现。 - **3.9 高效流复制器*...
通过对`java.io`包中的类和接口的学习,我们不仅能够深入了解Java中基础输入输出流的实现原理,还能够掌握如何高效地处理文件和其他数据流。这对于日常的软件开发工作是非常有用的。此外,通过理解装饰者模式的应用...
例如,代码中的"d://java/io/TestFileInputStream.java",使用的是绝对路径。在实际开发中,根据不同的操作系统和环境,可能需要使用相对路径或者不同方式来指定文件路径,以适应不同的部署环境。 以上知识点详细...
- **标记与重置**:一些`InputStream`子类支持标记(`mark()`)和重置(`reset()`)功能,允许你重新读取之前已经读取的数据。 - **高效的流复制**:`ByteArrayInputStream`和`ByteArrayOutputStream`可用于在内存...
- `void reset()`:将流重新定位到上次调用mark()方法的位置。 #### OutputStream方法 与InputStream相对应,OutputStream提供了以下几种写入方法: - `void write()`:基础的写入方法,具体实现取决于子类。 - `...
- **标记和重置**:通过 `mark` 和 `reset` 方法支持流的回溯操作。 #### 七、文件流(File Streams) - **文件读取**:使用 `FileInputStream` 和 `FileReader` 分别以字节和字符方式读取文件。 - **文件写入**:...
在Java编程语言中,IO(Input/Output)流是处理数据输入和输出的关键部分,而FileInputStream和FileOutputStream是Java IO中的基础类,用于读写文件。为了提高效率,我们通常会结合BufferedInputStream和...
本篇主要介绍Java中的IO操作中的类层次结构以及缓冲流的使用。 #### 类层次结构 Java IO体系主要通过一系列抽象类和接口构建而成,形成了丰富的类层次结构。这种结构不仅方便了程序员理解和使用,也极大地扩展了...
Java的IO流是Java平台核心特性之一,用于处理程序中的数据输入和输出。在Java中,流被定义为一组有序的数据序列,可以是字节流或字符流。字节流处理的数据最小单位是字节,而字符流处理的是Unicode字符。 Java I/O...
此外,InputStream还提供了close()来关闭流,available()返回可读取的字节数,skip(long n)跳过指定数量的字节,markSupported()检查是否支持标记功能,mark(int readlimit)设置标记,reset()则恢复到之前设定的标记...
Java的`java.io`包包含了各种流类型,包括输入流、输出流、字节流和字符流,以及节点流和处理流。 **流的分类:** 1. **按方向分:** - **输入流(InputStream/Reader)**:只能用于读取数据,不能写入。 - **...
Java IO中的BufferedInputStream是Java I/O流处理中非常重要的一部分,它属于过滤输入流(FilterInputStream)的一个子类。BufferedInputStream的主要目的是提高输入流的读取效率,通过内部维护一个缓冲区来批量处理...
Java语言中的IO输入输出是程序与外部数据交互的重要机制,主要涉及文件操作、流的概念以及相关的类和接口。本部分讲解的是杭州电子科技大学JAVA语言程序设计课程中的第七章,即"文件I/O输入/输出"。 1. **File类**...
Java的IO流是Java编程中用于处理输入输出操作的核心机制。在Java中,流是一组有序的数据序列,可以是字节或字符,用于在不同数据源之间传输数据。流主要分为两大类:输入流(Input Stream)和输出流(Output Stream...
在IO流中, mark()和reset()方法用于标记流中的位置,skip()方法用于跳过流中的某些字节,而available()方法用于获取流中的可用字节数。close()方法用于关闭流,释放系统资源。 在Java中,IO流还可以用于实现对象...