首页 > 试题广场 >

介绍一下Java中的IO流

[问答题]

介绍一下Java中的IO流

推荐

【得分点】

    输入流与输出流、字节流与字符流、节点流与处理流

【参考答案】

标准回答

    流是Java对不同输入源输出源的抽象,代表了从起源到接收的有序数据,有了它程序就可以采用统一的方式来访问不同的输入源和输出源了。

    按照数据的流向,可以将流分为输入流和输出流。其中,输入流只能读取数据、不能写入数据,而输出流只能写入数据、不能读取数据。

    按照数据的类型,可以将流分为字节流和字符流。其中,字节流操作的数据单元是byte(8位的字节),而字符流操作的数据单元是char(16位的字符)。

    按照使用的场景,可以将流分为节点流和处理流。其中,节点流可以直接从/向一个特定的IO设备读/写数据,也称为低级流。而处理流则是对节点流的连接或封装,用于简化数据读/写功能或提高效率,也成为高级流。

    Java中的IO流主要有4个基类:InputStream、OutputStream、Reader、Writer。其中,InputStream代表字节输入流,OutputStream代表字节输出流,Reader代表字符输入流,Writer代表字符输出流。其他的IO流都是从这4个基类派生而来的,并且子类的名字往往以基类的名字结尾,所以通过类名我们很容易识别某个流的作用。

    Java为我们提供了大量的IO流实现,我们没办法逐个介绍,下面举一些较为常用的例子:

1. 用于访问文件的FileInputStream、FileOutputStream、FileReader、FileWriter。

2. 带有缓冲功能的BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter。

3. 具有转换功能的InputStreamReader、OutputStreamWriter。

4. 支持打印功能的PrintStream、PrintWriter。

加分回答

    Unix IO一共包含5种模型,分别是阻塞式IO、非阻塞IO、IO多路复用、信号驱动IO、异步IO。Java的IO流实现是依附于平台的,换句话说它依赖于上述5种模型,实际上Java的IO流是基于阻塞式IO实现的。阻塞式IO是性能最差的IO模型了,所以Java的IO流并不是一个高效的实现,在Java的早期人们对Java性能的诟病也正源于此。

    从1.4开始,Java提供了新的IO模型(NIO),这种IO模型是基于IO多路复用实现的。从1.7开始,Java又对IO模型进行了升级(NIO2),在本次升级中Java提供了异步IO模型(AIO)。这两种IO模型的引入,使得Java处理IO的性能大大的提高了,我们在处理IO问题时也应该尽量选择NIO,而少用IO流。

【延伸阅读】

 下表给大家整理了一些常用的类,黑色字体是抽象基类,红色字体是节点流,蓝色字体是处理流。

编辑于 2021-09-17 11:28:21 回复(0)
Java IO流
    对磁盘的io操作 file
    对字节的io操作 inputStream  OutputStream
    对字符的io操作  Reader  Writer
    对对象的io操作  Serializable
    对网络的io操作  Socket
    新的io操作    NIO
发表于 2022-09-14 16:55:45 回复(0)
InputStream OutputStream Writer Reader
发表于 2022-10-20 17:05:40 回复(0)
Java中的IO流主要有4个基类:InputStream、OutputStream、Reader、Writer。其中,InputStream代表字节输入流,OutputStream代表字节输出流,Reader代表字符输入流,Writer代表字符输出流。其他的IO流都是从这4个基类派生而来的,并且子类的名字往往以基类的名字结尾。之后Java提供了新的IO模型(NIO),这种IO模型是基于IO多路复用实现的。
发表于 2022-10-09 15:54:27 回复(0)
Javaio 流按流向分为输入和输出流,按单元分为字符和字节流,其中字节流有inputstream和outputstream,字符流有writer和reader.

发表于 2024-09-20 19:00:08 回复(0)
IO流主要用于程序与外部数据源进行数据交互的
1.按照流向分类,可以分为输入流和输出流
2.按照数据类型分类,可以分为字节流和字符流
3.按照功能进行分类,可以分为节点流和处理流
发表于 2024-08-15 11:49:10 回复(0)
Java的IO
按流向分为 输出流、输入流
按单元分为 字符流、字节流
字节流: InputStream、OutputStream
字符流:Reader、Writer
按功能进行分类:
节点流
处理流
发表于 2023-05-24 19:33:35 回复(0)
分类
  • 按照流的流向划分,可分为输入流和输出流
  • 按照操作单元划分,可分为字节流和字符流

Java Io流共涉及40多个类,这些类看上去很杂乱,但实际上很有规则,而且彼此之间存在非常紧密的联系, Java I0流的40多个类都是从如下4个抽象类基类中派生出来的:
  • InputStream/Reader: 所有的输入流的基类,前者是字节输入流,后者是字符输入流。
  • OutputStream/Writer: 所有输出流的基类,前者是字节输出流,后者是字符输出流。
参考:

发表于 2022-11-05 17:14:56 回复(0)

InputStream

OutputStream

Reader

Writer

发表于 2022-07-20 09:47:45 回复(0)