`

InputStream的mark和reset方法测试

阅读更多
public class InputStreamTest {
	public static void main(String[] args) throws IOException {
		writeToFile();
		readFromFile();
	}

	private static void readFromFile() {
		InputStream inputStream = null;
		
		try {
			inputStream = new BufferedInputStream(new FileInputStream(new File("test.txt")));
			
			// 判断该输入流是否支持mark操作
			if (!inputStream.markSupported()) {
				System.out.println("mark/reset not supported!");
				return;
			}
			
			int ch;
			int count = 0;
			boolean marked = false;
			while ((ch = inputStream.read()) != -1) {
				System.out.print("." + ch);
				
				if ((ch == 4) && !marked) {
					// 在4的地方标记位置
					inputStream.mark(6);
					marked = true;
				}
				
				if (ch == 8 && count < 2) {
					// 重设位置到4
					inputStream.reset();
					count++;
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				inputStream.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	private static void writeToFile() {
		OutputStream output = null;
		try {
			output = new BufferedOutputStream(new FileOutputStream(new File("test.txt")));
			byte[] b = new byte[20];
			for (int i = 0; i < 20; i++)
				b[i] = (byte) i;
			// 写入从0到19的20个字节到文件中
			output.write(b);
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				output.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}


输出为:
.0.1.2.3.4.5.6.7.8.5.6.7.8.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19
分享到:
评论

相关推荐

    Java中InputStream类.pdf

    - `public boolean markSupported()`: 检查流是否支持`mark`和`reset`操作。如果支持,则返回`true`,否则返回`false`。 - `public abstract int read() throws IOException`: 读取单个字节数据,返回值范围是-1到...

    IO流文档InputStream / OutputStream

    在IO流中, mark()和reset()方法用于标记流中的位置,skip()方法用于跳过流中的某些字节,而available()方法用于获取流中的可用字节数。close()方法用于关闭流,释放系统资源。 在Java中,IO流还可以用于实现对象...

    springboot 解决InputStream只能读取一次的问题

    // 实现其他ServletInputStream的方法,如 available(), markSupported(), mark(int), reset() } } ``` 在这个例子中,我们创建了一个名为`RepeatableHttpServletRequest`的类,它继承自`...

    Java中的字节流文件读取教程(一)

    这些方法都是用于读取文件的字节流, skip方法用于跳过n个字节,close方法用于关闭流并释放对应的资源,mark和reset方法用于标志当前流读取位置和重置读取指针。 5. OutputStream和InputStream的相似性 ...

    java输入输出流总结.docx

    Java 输入输出流是Java IO API的核心部分,用于在...了解和掌握这些基本概念和方法,对于开发高效且可靠的Java应用程序至关重要。在实际编程中,我们还需要注意处理可能出现的IOException等异常,确保程序的健壮性。

    Java字节流 .pdf

    * boolean markSupported():测试此输入流是否支持mark和reset方法。 * abstract int read():从输入流中读取数据的下一个字节。 * int read(byte[] b):从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中。...

    BufferedInputStream(缓冲输入流)详解_动力节点Java学院整理

    它的主要作用是为另一个输入流添加一些功能,例如提供“缓冲功能”和支持“mark() 标记”和“reset() 重置方法”。 BufferedInputStream 的工作原理是通过一个内部缓冲区数组实现的。例如,在新建某输入流对应的 ...

    Java_输入输出流及文件读写详解.docx

    本文档对 Java 中的输入输出流和文件读写进行了详细的介绍,涵盖了 I/O 类的体系结构、字节流和字符流、InputStream 类的方法等内容,为程序员提供了深入了解 Java 中的输入输出流和文件读写的基础知识。

    java输入输出流总结.pdf

    Java 输入输出流是Java编程语言中用于处理数据输入和输出的核心机制。在Java中,输入输出流被设计成一种抽象的概念,允许程序处理各种不同类型的输入...理解并熟练运用这些类和方法是编写高效、健壮的Java程序的关键。

    JAVA语言程序设计第七章(2)ppt课件.ppt

    两者都支持close方法以关闭流,还有skip、mark和reset方法用于控制流的读取位置。 Java的流类形成了层次结构,每个核心流类都有其对应的字节流和字符流版本。例如,InputStreamReader和OutputStreamWriter是连接...

    java_IO流的处理.ppt

    - `markSupported()`:检查流是否支持mark和reset。 **Java.io包中的InputStream子类** - FileInputStream:用于从文件读取字节。 - ByteArrayInputStream:从内存中的字节数组读取数据。 - FilterInputStream:...

    Java_输入输出流及文件读写详解

    `mark()`和`reset()`方法支持标记读取位置,便于回溯。`markSupported()`检查流是否支持标记功能。 2. 字节输出流(Byte Output Stream)的基类是`OutputStream`,例如`FileOutputStream`和`BufferedOutputStream`...

    restream:用于缓冲和重新读取 java.io.InputStream 的实用程序类

    在Java编程中,`InputStream`是处理字节流的基础类,广泛用于读取各种输入数据,如文件、网络连接等。...在具体使用时,应仔细阅读库的文档,了解各个类和方法的具体用法,以便更好地融入到自己的项目中。

    语言程序设计资料:java输入输出-(数据库技术-安全技术-).ppt

    - `markSupported()`:检查流是否支持`mark()`和`reset()`操作。 - `read()`:读取单个字节。 - `read(byte[])`和`read(byte[], int, int)`:将字节读入字节数组。 - `reset()`:重置流的读取位置至先前标记的位置。...

    IO体系.java

    | 为另一个输入流添加一些功能,创建一个缓冲区,支持mark和reset方法。 | mark操作记录输入流中的某个点,reset操作在从包含的输入流获取新字节前,再读取最后一次。 |--DataInputStream/:用于操作基本数据...

    io 流 ppt 有问题 www.willvc.com.cn 能联系到我

    在实际编程中,了解并熟练运用这些概念和方法,可以高效地进行数据的读写和传输。同时,理解流的层次结构和类型,以及它们如何相互配合工作,对于解决复杂的I/O问题至关重要。如果在使用I/O流过程中遇到问题,可以...

    四川大学java6课件

    在使用`InputStream`时,可以调用`read()`方法读取数据,`available()`检查剩余的可读字节数,`skip()`跳过指定数量的字节,`mark()`和`reset()`用于设置和恢复读取的标记位置。对于`OutputStream`,`write()`方法...

    java对I/O流的处理

    `mark()`和`reset()`方法支持流的标记和回溯,但并非所有流都支持这些操作,需要通过`markSupported()`检查。 **Reader和Writer** 字符流的基类`Reader`和`Writer`提供类似的方法,但处理的是字符数据。`read()`...

    Java-IO流.docx

    - `markSupported()`,`mark(int)`,`reset()`方法:标记当前读取位置,以便稍后重置到该位置。 3. **字节输出流(OutputStream)** - `write()`方法:用于向输出流写入数据。也有三个重载版本,分别写入单个字节...

    JAVA语言课时授课计划10-5页.pdf

    - InputStream的read()方法用于读取单个字节,skip()方法跳过指定字节数,mark()和reset()方法用于设置和回溯读取位置,close()方法用于关闭流。 - OutputStream的write()方法用于写入单个字节,flush()方法刷新...

Global site tag (gtag.js) - Google Analytics