Java中的io



1InputStreamOutputStream的子类

Java中的InputStream类的子类有:

ByteArrayInputStream

StringBufferInputStream(现在已经过时)

FileInputStream

PipedInputStream

SequenceInputStream

FilterInputStream

OutputStream的子类有:

ByteArrayOutputStream

FileOutputStream

PipedOutputStream

FilterOutputStream

其中FilterInputStreamFilterOutputStream是抽象类,采用的是Decorator模式

2FilterInputStreamFilterOutputStream

FilterInputStream的子类有:

DataInputStream:用于读取基本数据类型

BufferedInputStream:避免每次想要更多数据时都进行物理性的读取,告诉它在缓冲区里找

LineNumberInputStream:跟踪输入流中的行号

PushbackInputStream:有一个字节的后推缓冲区,以便后推读入的上一个字符。一般不在自己的代码中使用。

FilterOutputStream的子类有:

DataOutputStream

PrintStream

BufferedOutputStream

3RandomAccessFile

RandomAccessFile用于包含了已知长度记录的文件,能用seek()从一条记录移到另一条;然后读取或修改记录。RandomAccessFile不属于InputStreamOutputStream分层结构中的部分。用getFilePointer()获取当前在文件的什么地方,seek()用于移到文件内的另一个地方,length()判断文件的长度。

4File

File类既可能表示文件,也可以表示目录,如果要实现过滤,需要实现接口FilenameFilter的方法boolean accept(File dir, String name)File类也可以获取文件属性,文件删除,目录创建操作。

5StreamTokenizer

将任何InputStream分割为一系列token。通过nextToken方法获取下一个token,StreamTokenizer有一些静态成员来表示数据类型或者是否结束。

StreamTokenizer.TT_EOF表示没有token

StreamTokenizer.TT_NUMBER:表示数据类型是数字

StreamTokenizer.TT_WORD:表示数据类型是字符串

而其中的成员ttype用来表示当前的数据类型。

StringTokenizerStreamTokenizer相似,但是用于处理字符串的,在判断是否有token时,是用的方法hasMoreTokens()

6ReaderWriter

添加ReaderWriter层次,主要是国际化的需求。老式IO流层次结构只支持8位字节流,不能很好的控制16unicode字符。原来的流与对应的readerwriter对应关系为

InputStream   ->    InputStreamReader

OutputStream  ->    OutputStreamWriter

ByteArrayInputStream  ->  CharArrayReader

ByteArrayOutputStream -> CharArrayWriter

StringBufferInputStream  -> StringReader

无对应的流     -> StringWriter

FileInputStream   -> FileReader

FileOutputStream   -> FilleWriter

PipedInputStream  -> PipedReader

PipedOutputStream -> PipedWriter

FilterInputStream -> FilterReader

FilterOutputStream -> FilterWriter

BufferedInputStream -> BufferedReader

BufferedOutputStream -> BufferedWriter

LineNumberInputStream ->LineNumberReader

PushbackInputStream -> PushbackReader

PrintStream -> PrintWriter

7I/O重定向

使用System的静态方法

setIn(InputStream)

setOut(PrintStream)

setErr(PrintStream)

8、压缩|解压

涉及的类有

CheckedInputStream GetCheckSum()为输入流产生检验和

CheckedOutputStream GetCheckSum()为输出流产生检验和

InflaterInputStream用于解压类的基础类

ZipInputStream一个InflaterInputStream,解压用zip文件格式保存的数据

GZIPInputStream一个InflaterInputStream,解压用Gzip文件格式保存的数据

DeflaterOutputStream用于压缩类的基础类

ZipOutputStream一个DeflaterOutputStream,将数据压缩成zip文件格式

GZIPOutputStream一个DeflaterOutputStream,将数据压缩成gzip文件格式

9、序列化

Serializable序列化会将对象的所有数据,可以通过设置transient来控制序列化过程,使子对象不序列化。

### Java IO流的概念及使用方法 JavaIO流通过`java.io`包下的类和接口来支持,主要用于数据的读取和写入操作。IO流可以分为输入流(InputStream)和输出流(OutputStream),并且根据处理的数据单位不同,又可分为字节流和字符流[^1]。 #### 1. IO流的分类 - **字节流**:以字节为单位进行数据处理,适用于所有类型的文件,包括二进制文件。主要类有`FileInputStream`和`FileOutputStream`。 - **字符流**:以字符为单位进行数据处理,仅适用于纯文本文件。主要类有`FileReader`和`FileWriter`[^4]。 此外,JavaIO流还采用了装饰者设计模式,将流分为底层节点流和上层处理流。节点流直接与物理存储节点关联,而处理流则对节点流进行包装,提供额外的功能,如缓冲、过滤等[^1]。 #### 2. 字符流的使用示例 以下是一个使用字符流读取文件内容的示例代码: ```java import java.io.BufferedReader; import java.io.FileReader; public class Demo2 { public static void main(String[] args) { try { BufferedReader br = new BufferedReader(new FileReader("E:\\Test.txt")); String line; while ((line = br.readLine()) != null) { System.out.println(line); } br.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 在上述代码中,`BufferedReader`被用来提高读取效率,并且通过`readLine()`方法逐行读取文件内容[^2]。 #### 3. 序列化的使用 序列化是Java IO流的一个重要应用,用于将对象转换为字节流以便于存储或传输。为了实现序列化,类必须实现`Serializable`接口。以下是一个对象序列化的示例代码: ```java import java.io.FileOutputStream; import java.io.ObjectOutputStream; import java.io.Serializable; class Student implements Serializable { private static final long serialVersionUID = 1L; String name; int age; public Student(String name, int age) { this.name = name; this.age = age; } } public class SerializationDemo { public static void main(String[] args) throws Exception { Student student = new Student("张三", 22); ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("student")); oos.writeObject(student); oos.flush(); oos.close(); } } ``` 在此示例中,`ObjectOutputStream`被用来将`Student`对象序列化并保存到文件中[^3]。 #### 4. 关闭流的重要性 如果不关闭IO流,可能会导致资源泄漏,影响程序性能甚至引发异常。因此,在完成数据读写后,务必调用`close()`方法释放相关资源[^1]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kgduu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值