java io包

InputStream

 InputStream 是 Java I/O 中所有输入流的抽象基类,它定义了读取字节流的基本方法。  

 InputStream 类提供了许多子类,用于从不同的数据源读取数据,如文件、网络连接、内存等。

 InputStream 提供了以下常用的方法:

  • int read(): 从输入流中读取下一个字节的数据。如果已经到达流的末尾,则返回 -1。
  • int read(byte[] b): 从输入流中读取一定数量的字节,并将其存储到字节数组 b 中。返回实际读取的字节数。
  • int read(byte[] b, int off, int len): 从输入流中读取最多 len 个字节的数据,并将其存储到从偏移量 off 开始的字节数组 b 中。返回实际读取的字节数。
  • long skip(long n): 跳过并丢弃输入流中的 n 个字节数据,并返回实际跳过的字节数。
  • int available(): 返回可以从输入流中读取而不被阻塞的字节数。
  • void close(): 关闭输入流并释放与之关联的系统资源。

InputStream 是一个抽象类,不能直接实例化,通常通过其具体的子类来实现不同的输入流功能,如 FileInputStreamByteArrayInputStreamBufferedInputStream

1 ByteArrayInputStream:这个类允许将内存中的字节数组作为输入流来处理。它的构造函数接受一个字节数组作为参数,并可以从该数组中读取数据。它通常用于在内存中处理二进制数据,比如处理内存中的图片数据或者处理网络数据。
byte[] byteArray = { 1, 2, 3, 4, 5 };
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArray);

2 FileInputStream:这个类用于从文件系统中读取数据。它的构造函数接受一个文件路径作为参数,然后可以从该文件中读取数据。它通常用于读取文件内容,比如读取文本文件、图片文件等。
FileInputStream fileInputStream = new FileInputStream("example.txt");

3 FilterInputStream:这个类是一个抽象类,它提供了对输入流的过滤功能。它本身并不能直接创建实例,而是通过其子类来实现具体的功能。常用的子类包括 BufferedInputStream、DataInputStream 等,它们可以在输入流的基础上添加缓冲、数据格式化等功能。
InputStream inputStream = new FileInputStream("example.txt");
FilterInputStream filterInputStream = new BufferedInputStream(inputStream);

 3.1 BufferedInputStream:
 BufferedInputStream是InputStream的子类,它提供了缓冲功能,可以提高读取数据的性能。
当你需要从输入流中读取数据时,BufferedInputStream会先将一部分数据读取到内存缓冲区中,然后逐步从缓冲区中读取数据,减少了直接从硬盘或网络读取数据的次数,从而提高了读取效率。

 3.2DataInputStream:
 DataInputStream是InputStream的子类,它提供了一些方法来读取Java基本数据类型和字符串。
例如,它提供了readInt()、readDouble()、readUTF()等方法,可以用来读取整型、双精度浮点数和UTF-8编码的字符串。

 3.3LineNumberInputStream:
 LineNumberInputStream是InputStream的子类,它提供了跟踪行号的功能。
当你从一个文本文件中逐行读取数据时,LineNumberInputStream会跟踪当前读取的行号,方便你在需要时获取行号信息。

3.4 PushbackInputStream:
PushbackInputStream是InputStream的子类,它提供了回推功能,允许你将读取的数据推回到输入流中。
这在某些场景下很有用,比如你读取了一些数据但最终决定不使用它们,你可以将这些数据推回到输入流中,以便后续读取

4 ObjectInputStream:用于从输入流中读取 Java 对象。它可以读取通过 ObjectOutputStream 写入的对象,并将它们还原为内存中的对象实例。
FileInputStream fileInputStream = new FileInputStream("object.dat");
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);


5 PipedInputStream:通过管道进行线程间通信时,可用于接收来自管道输出流的数据。通常与 PipedOutputStream 一起使用。
PipedOutputStream pipedOutputStream = new PipedOutputStream();
PipedInputStream pipedInputStream = new PipedInputStream(pipedOutputStream);


6 SequenceInputStream:用于将多个输入流串联起来,形成一个顺序读取的输入流。它接受两个输入流作为参数,在读取时先从第一个输入流读取数据,当第一个输入流读取结束后再从第二个输入流读取数据,依次类推。
FileInputStream fileInputStream1 = new FileInputStream("file1.txt");
FileInputStream fileInputStream2 = new FileInputStream("file2.txt");
SequenceInputStream sequenceInputStream = new SequenceInputStream(fileInputStream1, fileInputStream2);


7 StringBufferInputStream:已过时的类,用于将字符串转换为输入流。它将一个字符串转换为字节流,但由于它使用的是默认的字符编码,因此可能导致在处理非 ASCII 字符时出现问题。建议使用 ByteArrayInputStream 或 ByteArrayInputStream 代替。
StringBufferInputStream stringBufferInputStream = new StringBufferInputStream("Hello, world!");

OutPutStream

OutputStream是Java中所有输出流的抽象基类。它定义了一系列用于向目标位置写入数据的方法。OutputStream本身是一个抽象类,不能直接实例化,而是通过其子类来实现具体的输出流功能。

一些常见的OutputStream的子类已经在之前提到了,包括FileOutputStreamByteArrayOutputStream等。这些子类都实现了OutputStream中定义的方法,用于写入数据到不同的目标位置,比如文件、内存、网络等。

一些常见的OutputStream的方法包括:

  • write(int b):写入一个字节到输出流。
  • write(byte[] b):写入一个字节数组到输出流。
  • write(byte[] b, int off, int len):写入指定长度的字节数组到输出流,并指定起始位置和长度。
  • flush():刷新输出流,将缓冲区中的数据立即写入到目标位置。
  • close():关闭输出流,释放相关的资源。
  1. ByteArrayOutputStream

    • ByteArrayOutputStream是OutputStream的一个子类,它可以将数据写入到一个字节数组中。
    • 当你需要将数据写入到内存中的字节数组时,可以使用ByteArrayOutputStream。它提供了一系列write()方法来写入数据,并且可以通过toByteArray()方法获取写入的字节数组。
  2. FileOutputStream

    • FileOutputStream是OutputStream的一个子类,它用于将数据写入到文件中。
    • 当你需要将数据写入到文件中时,可以使用FileOutputStream。你可以指定文件路径作为构造函数的参数,然后使用write()方法将数据写入文件。
  3. FilterOutputStream

    • FilterOutputStream是OutputStream的一个抽象子类,它可以用于添加一些额外的功能来装饰其他的输出流。
    • 你可以通过继承FilterOutputStream并覆写其方法来添加自定义的输出流功能,比如数据加密、压缩等。
  4. ObjectOutputStream

    • ObjectOutputStream是OutputStream的一个子类,它用于将Java对象写入到输出流中。
    • 当你需要将Java对象序列化成字节流并写入到文件或网络中时,可以使用ObjectOutputStream。它可以序列化对象,并通过writeObject()方法将对象写入输出流。
  5. PipedOutputStream

    • PipedOutputStream是OutputStream的一个子类,它和PipedInputStream一起使用来实现线程间的管道通信。
    • 你可以将PipedOutputStream连接到一个PipedInputStream,然后在一个线程中写入数据到PipedOutputStream,另一个线程可以从连接的PipedInputStream中读取数据。
Reader

 Reader类是用于读取字符流的抽象类。它是所有字符输入流的父类,提供了一系列用于读取字符数据的方法。Reader本身是一个抽象类,不能直接实例化,而是通过其子类来实现具体的字符输入流功能

Reader类中定义了一些常用的方法,包括:

  • int read():读取单个字符并返回其Unicode代码点。
  • int read(char[] cbuf):将字符读入数组中,并返回读取的字符数。
  • int read(char[] cbuf, int off, int len):将字符读入数组的指定位置,并返回读取的字符数。
  • void close():关闭输入流并释放与之关联的系统资源。
  • void mark(int readAheadLimit):在当前位置设置标记,以便后续调用reset()方法时能够返回到该位置。
  • boolean markSupported():判断该输入流是否支持标记操作。
  • void reset():将输入流的位置重置到最近的标记位置。
  • long skip(long n):跳过指定数量的字符。
  1. FileReader:从文件中读取字符数据的字符输入流。
  2. BufferedReader:提供了缓冲功能,用于提高读取字符数据的性能。
  3. CharArrayReader:从字符数组中读取字符数据的字符输入流。
  4. InputStreamReader:将字节流转换为字符流的字符输入流。
  5. PipedReader:用于实现线程间通信的字符输入流。
  6. StringReader:从字符串中读取字符数据的字符输入流。
Writer

Writer类是用于写入字符流的抽象类。它是所有字符输出流的父类,提供了一系列用于写入字符数据的方法。与Reader类类似,Writer也是一个抽象类,不能直接实例化,而是通过其子类来实现具体的字符输出流功能

Writer类中定义了一些常用的方法,包括:

  • void write(int c):写入单个字符。
  • void write(char[] cbuf):将字符数组中的所有字符写入。
  • void write(char[] cbuf, int off, int len):将字符数组的指定部分写入。
  • void write(String str):将字符串中的所有字符写入。
  • void write(String str, int off, int len):将字符串的指定部分写入。
  • void flush():刷新该流的缓冲区,将数据写入目的地。
  • void close():关闭输出流并释放与之关联的系统资源。

通过这些方法,Writer及其子类提供了灵活的方式来写入字符数据,可以将数据写入到文件、内存、网络等不同的目的地。

一些常见的Writer的子类包括:

  1. FileWriter:向文件中写入字符数据的字符输出流。
  2. BufferedWriter:提供了缓冲功能,用于提高写入字符数据的性能。
  3. CharArrayWriter:向字符数组中写入字符数据的字符输出流。
  4. OutputStreamWriter:将字符流转换为字节流的字符输出流。
  5. PipedWriter:用于实现线程间通信的字符输出流。
  6. StringWriter:将字符数据写入到字符串中的字符输出流。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值