Java中IO流概述

1 篇文章 0 订阅
1 篇文章 0 订阅

1.InputStream 和 OutputStream 继承结构图:

在这里插入图片描述

2.Reader 和 Writer 继承结构图:

在这里插入图片描述

3. 内容

3.1 Java 流概述
文件通常是由一连串的字节或字符构成,组成文件的字节序列称为字节流,组成文件的字符
序列称为字符流。Java 中根据流的方向可以分为输入流和输出流。输入流是将文件或其它输入
设备的数据加载到内存的过程;输出流恰恰相反,是将内存中的数据保存到文件或其他输出设
备,详见下图:
在这里插入图片描述
文件是由字符或字节构成,那么将文件加载到内存或再将文件输出到文件,需要有输入和输出
流的支持,那么在 Java 语言中又把输入和输出流分为了两个,字节输入和输出流,字符输入
和输出流。
3.2InputStream(字节输入流)
InputStream 是字节输入流,InputStream 是一个抽象类,所有继承了 InputStream 的类都是
字节输入流,主要方法:

void close() 
关闭此输入流并释放与该流关联的所有系统资源。
abstract int read() 
从输入流读取下一个数据字节。
int read(byte[] b) 
从输入流中读取一定数量的字节并将其存储在缓冲
区数组 b 中。
int read(byte[] b, int off, int len) 
将输入流中最多 len 个数据字节读入字节数组。

3.3 OutputStream(字节输出流)
所有继承了 OutputStream 都是字节输出流

void close() 
关闭此输出流并释放与此流有关的所有系统资源。
void flush() 
刷新此输出流并强制写出所有缓冲的输出字节。
void write(byte[] b) 
将 b.length 个字节从指定的字节数组写入此输出
流。
void write(byte[] b, int off, int len) 
将指定字节数组中从偏移量 off 开始的 len 个字
节写入此输出流。
abstract void write(int b)
将指定的字节写入此输出流。

3.4 Reader(字符输入流)

abstract void close() 
关闭该流。
int read() 
读取单个字符。
int read(char[] cbuf) 
将字符读入数组。
abstract int read(char[] cbuf, int off, int len) 
将字符读入数组的某一部分。

3.5 Writer(字符输出流)

Writer append(char c) 
将指定字符追加到此 writer。
abstract void close() 
关闭此流,但要先刷新它。
abstract void flush() 
刷新此流。
void write(char[] cbuf) 
写入字符数组。
abstract void write(char[] cbuf, int off, int len) 
写入字符数组的某一部分。
void write(int c) 
写入单个字符。
void write(String str) 
写入字符串。
void write(String str, int off, int len) 
写入字符串的某一部分。

4.面试题

  1. 字节流和字符流的区别?
字符流和字节流的使用非常相似,但是实际上字节流的操作不会经过缓冲区(内存)而是直
接操作文本本身的,而字符流的操作会先经过缓冲区(内存)然后通过缓冲区再操作文件
以字节为单位输入输出数据,字节流按照 8 位传输
以字符为单位输入输出数据,字符流按照 16 位传

2.什么是 IO 流?

它是一种数据的流从源头流到目的地。比如文件拷贝,输入流和输出流都包括了。输入流从
文件中读取数据存储到进程(process)中,输出流从进程中读取数据然后写入到目标文件。

3.有哪些可用的 Filter 流?

在 java.io 包中主要由 4 个可用的 filter Stream。两个字节 filter stream,两个字符 filter stream. 分别是 FilterInputStream, FilterOutputStream, FilterReader and FilterWriter.这些类是抽象类,不
能被实例化的。

4.Java 中有几种类型的流?

按照流的方向:输入流(inputStream)和输出流(outputStream)
按照实现功能分:节点流(可以从或向一个特定的地方(节点)读写数据。如 FileReader)
和处理流(是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。
如 BufferedReader。处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过
其他流的多次包装,称为流的链接。)
按照处理数据的单位: 字节流和字符流。字节流继承于 InputStreamOutputStream, 字
符流继承于 InputStreamReaderOutputStreamWriter

5.如何实现对象克隆?

有两种方式:
1). 实现 Cloneable 接口并重写 Object 类中的 clone()方法;
2). 实现 Serializable 接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克
隆

6.什么是缓冲区?有什么作用?

缓冲区就是一段特殊的内存区域,很多情况下当程序需要频繁地操作一个资源(如文件或数
据库)则性能会很低,所以为了提升性能就可以将一部分数据暂时读写到缓存区,以后直接
从此区域中读写数据即可,这样就可以显著的提升性能。
对于 Java 字符流的操作都是在缓冲区操作的,所以如果我们想在字符流操作中主动将缓冲
区刷新到文件则可以使用 flush() 方法操作。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值