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
分享到:
相关推荐
- `public boolean markSupported()`: 检查流是否支持`mark`和`reset`操作。如果支持,则返回`true`,否则返回`false`。 - `public abstract int read() throws IOException`: 读取单个字节数据,返回值范围是-1到...
在IO流中, mark()和reset()方法用于标记流中的位置,skip()方法用于跳过流中的某些字节,而available()方法用于获取流中的可用字节数。close()方法用于关闭流,释放系统资源。 在Java中,IO流还可以用于实现对象...
// 实现其他ServletInputStream的方法,如 available(), markSupported(), mark(int), reset() } } ``` 在这个例子中,我们创建了一个名为`RepeatableHttpServletRequest`的类,它继承自`...
这些方法都是用于读取文件的字节流, skip方法用于跳过n个字节,close方法用于关闭流并释放对应的资源,mark和reset方法用于标志当前流读取位置和重置读取指针。 5. OutputStream和InputStream的相似性 ...
Java 输入输出流是Java IO API的核心部分,用于在...了解和掌握这些基本概念和方法,对于开发高效且可靠的Java应用程序至关重要。在实际编程中,我们还需要注意处理可能出现的IOException等异常,确保程序的健壮性。
* boolean markSupported():测试此输入流是否支持mark和reset方法。 * abstract int read():从输入流中读取数据的下一个字节。 * int read(byte[] b):从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中。...
它的主要作用是为另一个输入流添加一些功能,例如提供“缓冲功能”和支持“mark() 标记”和“reset() 重置方法”。 BufferedInputStream 的工作原理是通过一个内部缓冲区数组实现的。例如,在新建某输入流对应的 ...
本文档对 Java 中的输入输出流和文件读写进行了详细的介绍,涵盖了 I/O 类的体系结构、字节流和字符流、InputStream 类的方法等内容,为程序员提供了深入了解 Java 中的输入输出流和文件读写的基础知识。
Java 输入输出流是Java编程语言中用于处理数据输入和输出的核心机制。在Java中,输入输出流被设计成一种抽象的概念,允许程序处理各种不同类型的输入...理解并熟练运用这些类和方法是编写高效、健壮的Java程序的关键。
两者都支持close方法以关闭流,还有skip、mark和reset方法用于控制流的读取位置。 Java的流类形成了层次结构,每个核心流类都有其对应的字节流和字符流版本。例如,InputStreamReader和OutputStreamWriter是连接...
- `markSupported()`:检查流是否支持mark和reset。 **Java.io包中的InputStream子类** - FileInputStream:用于从文件读取字节。 - ByteArrayInputStream:从内存中的字节数组读取数据。 - FilterInputStream:...
`mark()`和`reset()`方法支持标记读取位置,便于回溯。`markSupported()`检查流是否支持标记功能。 2. 字节输出流(Byte Output Stream)的基类是`OutputStream`,例如`FileOutputStream`和`BufferedOutputStream`...
在Java编程中,`InputStream`是处理字节流的基础类,广泛用于读取各种输入数据,如文件、网络连接等。...在具体使用时,应仔细阅读库的文档,了解各个类和方法的具体用法,以便更好地融入到自己的项目中。
- `markSupported()`:检查流是否支持`mark()`和`reset()`操作。 - `read()`:读取单个字节。 - `read(byte[])`和`read(byte[], int, int)`:将字节读入字节数组。 - `reset()`:重置流的读取位置至先前标记的位置。...
| 为另一个输入流添加一些功能,创建一个缓冲区,支持mark和reset方法。 | mark操作记录输入流中的某个点,reset操作在从包含的输入流获取新字节前,再读取最后一次。 |--DataInputStream/:用于操作基本数据...
在实际编程中,了解并熟练运用这些概念和方法,可以高效地进行数据的读写和传输。同时,理解流的层次结构和类型,以及它们如何相互配合工作,对于解决复杂的I/O问题至关重要。如果在使用I/O流过程中遇到问题,可以...
在使用`InputStream`时,可以调用`read()`方法读取数据,`available()`检查剩余的可读字节数,`skip()`跳过指定数量的字节,`mark()`和`reset()`用于设置和恢复读取的标记位置。对于`OutputStream`,`write()`方法...
`mark()`和`reset()`方法支持流的标记和回溯,但并非所有流都支持这些操作,需要通过`markSupported()`检查。 **Reader和Writer** 字符流的基类`Reader`和`Writer`提供类似的方法,但处理的是字符数据。`read()`...
- `markSupported()`,`mark(int)`,`reset()`方法:标记当前读取位置,以便稍后重置到该位置。 3. **字节输出流(OutputStream)** - `write()`方法:用于向输出流写入数据。也有三个重载版本,分别写入单个字节...
- InputStream的read()方法用于读取单个字节,skip()方法跳过指定字节数,mark()和reset()方法用于设置和回溯读取位置,close()方法用于关闭流。 - OutputStream的write()方法用于写入单个字节,flush()方法刷新...