Java IO

简介: IO所谓的四大抽象类就是:InputStream、OutputStream、Reader、Writer。

1 IO流的分类

1.1 按数据流的方向:输入流、输出流

此输入、输出是相对于我们写的代码程序而言。

  • 输入流:从别的地方(本地文件,网络上的资源等)获取资源输入到我们的程序中。
  • 输出流:从我们的程序中输出到别的地方(本地文件), 将一个字符串保存到本地文件中,就需要使用输出流。

1.2 按处理数据单位不同:字节流、字符流

1字符=2字节、1字节(byte)=8位(bit)、一个汉字占两个字节长度。

  • 字节流:每次读取(写出)一个字节,当传输的资源文件有中文时,就会出现乱码。
  • 字符流:每次读取(写出)两个字节,有中文时使用该流就可以正确传输显示中文。

字节流和字符流的区别:

字节流读取单个字节,字符流读取单个字符(一个字符根据编码的不同,对应的字节也不同,如 UTF-8 编码是 3 个字节,中文编码是 2 个字节。)字节流用来处理二进制文件(图片、MP3、视频文件),字符流用来处理文本文件(可以看做是特殊的二进制文件,使用了某种编码,人可以阅读)。简而言之,字节是个计算机看的,字符才是给人看的。

能使用字节流不一定能使用字符流,能使用字符流一定能使用字节流。

1.3 按功能不同:节点流、处理流

  • 节点流:以从或向一个特定的地方(节点)读写数据,如FileInputStream。
  • 处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写,如BufferedReader。处理流的构造方法总是要带一个其他的流对象做参数,一个流对象经过其他流的多次包装,

2 四大抽象类

IO所谓的四大抽象类就是:InputStream、OutputStream、Reader、Writer。

2.1 InputStream

字节输入流的父类,数据单位为字节。

节点流

  • FileInputStream:文件字节输入流(操作对象为File文件对象)
  • ByteArrayInputStream:字节数组输入流(操作对象为字节数组)

处理流

  • FilterInputStream:过滤字节输入流(简单的实现了InputSteam类,一般用它的子类BufferedInputSteam、DataInputStream等)
  • BufferedInputStream:字节输入缓冲流
  • DataInputStream:基本数据类型输入处理流
  • ObjectInputStream:引用数据类型输入处理流(对象反序列化)

常用方法

  • int read(); 从输入流中读取下一个字节
  • void close(); 关闭流

2.2 OutputStream

字节输出流的父类,数据单位为字节。

字节流

  • FileOutputStream:文件字节输出流(操作对象为File文件对象)
  • ByteArrayOutputStream:字节数组输出流(操作对象为字节数组)

处理流

  • FilterOutputStream:过滤字节输出流(简单的实现了OutputStream类,一般用它的子类BufferedOutputSteam、DataOutputStream等)
  • BufferedOutputStream:字节输出缓冲流
  • DataOutputStream:基本数据类型输出处理流
  • ObjectOutputStream:引用数据类型输出处理流(对象序列化)

常用方法

  • void write(int b); 将一个integer数组长度写入此流
  • void flush(); 刷新此流
  • void close(); 关闭该流并释放与之相关的所有资源

2.3 Reader

字符输入流的父类,数据单位为字符。

节点流

  • FileReader:文件字符输入流(操作对象为File文件对象)
  • CharArrayReader:字符数组输入流(操作对象为字符数组)

处理流

  • BufferedReader:字符输入缓冲流
  • InputStreamReader:字符输入格式处理流(可以设置字符编码等)

常用方法

  • int read(); 读取单个字符
  • int read(char[] cbuf, int off , int len ); 将字符读入数组的某一部分
  • void close(); 关闭该流并释放与之相关的所有资源

2.4 Writer

字符输出流的父类,数据单位为字符。

节点流

  • FileWriter:文件字符输出流(操作对象为File文件对象)
  • CharArrayWriter:字符数组输出流(操作对象为字符数组)

处理流

  • BufferedWriter:字符输出缓冲流
  • OutputStreamWriter:字符输出格式处理流(可以设置字符编码等)

常用方法

  • void writer(); 创建一个字符流
  • void flush(); 刷新此流
  • void close(); 关闭该流并释放与之相关的所有资源
相关文章
|
3月前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
1月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
67 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
2月前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
1月前
|
Java 数据处理 开发者
揭秘Java IO流:字节流与字符流的神秘面纱!
揭秘Java IO流:字节流与字符流的神秘面纱!
35 1
|
1月前
|
自然语言处理 Java 数据处理
Java IO流全解析:字节流和字符流的区别与联系!
Java IO流全解析:字节流和字符流的区别与联系!
74 1
|
28天前
|
Java
Java 中 IO 流的分类详解
【10月更文挑战第10天】不同类型的 IO 流具有不同的特点和适用场景,我们可以根据具体的需求选择合适的流来进行数据的输入和输出操作。在实际应用中,还可以通过组合使用多种流来实现更复杂的功能。
43 0
|
2月前
|
Java 大数据 API
Java 流(Stream)、文件(File)和IO的区别
Java中的流(Stream)、文件(File)和输入/输出(I/O)是处理数据的关键概念。`File`类用于基本文件操作,如创建、删除和检查文件;流则提供了数据读写的抽象机制,适用于文件、内存和网络等多种数据源;I/O涵盖更广泛的输入输出操作,包括文件I/O、网络通信等,并支持异常处理和缓冲等功能。实际开发中,这三者常结合使用,以实现高效的数据处理。例如,`File`用于管理文件路径,`Stream`用于读写数据,I/O则处理复杂的输入输出需求。
|
1月前
|
存储 Java 程序员
【Java】文件IO
【Java】文件IO
35 0
|
2月前
|
数据采集 Java 数据挖掘
Java IO异常处理:在Web爬虫开发中的实践
Java IO异常处理:在Web爬虫开发中的实践
|
3月前
|
Java 数据处理
Java IO 接口(Input)究竟隐藏着怎样的神秘用法?快来一探究竟,解锁高效编程新境界!
【8月更文挑战第22天】Java的输入输出(IO)操作至关重要,它支持从多种来源读取数据,如文件、网络等。常用输入流包括`FileInputStream`,适用于按字节读取文件;结合`BufferedInputStream`可提升读取效率。此外,通过`Socket`和相关输入流,还能实现网络数据读取。合理选用这些流能有效支持程序的数据处理需求。
46 2