java IO总结


IO可以分为BIO同步阻塞、NIO同步不阻塞、AIO异步不阻塞

输入和输出、字节和字符、节点和过滤

字节流InputStream  OutputStream
	InputStream
	     read(byte[]):int   将读入的数据写入到byte[]数组中,返回int值表示读取的字节数;返回-1表示流结束
	OutputStream
		write(byte[],0,len):void 将字节数组byte[]中的数据进行写出,写出的内容从byte[]的0位置开始,到len个字节结束
		
字符流Reader       Writer
	Reader
		read(char[]):int
	Writer
		write(char[],0.len)
    	write(String)

具体的实现类:
FileInputStream、FileOutputStream、FileReader、FileWriter属于节点流,用于实现读写文件
	追加数据new FileOutputStream("文件名称",true)
BufferedInputSteram、BufferedOutputStream、BufferedReader、BufferedWriter属于过滤流,用于提供缓存功能,减少访问目标数据源的次数
	特殊点:BufferedReader的特殊方法readLine():String一次性读取一行数据,会自动去除默认的回车符
InputStreamReader和OuputStreamWriter属于过滤流,用于实现字节流和字符流之间的转换
PrintStream过滤流和PrintWriter属于节点流
	特殊方法:print(obj)/println(obj)
DataInputStream和DataOuputStream属于过滤流,用于输入输出8种简单类型数据和String类型
	特殊方法readXxx和writeXxx

针对于String类型的数据一般建议使用PrintWriter和BufferedReader进行处理

ObjectInputStream和ObjectOutputStream属于过滤流,用于直接操作自定义类型的对象数据
	要求自定义类实现Serializable接口
	    transient
	特殊方法:readObject  writeObject

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

2、字节流和字符流的区别。
字节流在JDK1.0中就被引进了,用于操作包含ASCII字符的文件。JAVA也支持其他的字符如Unicode,为了读取包含Unicode字符的文件,JAVA语言设计者在JDK1.1中引入了字符流。ASCII作为Unicode的子集,对于英语字符的文件,可以使用字节流也可以使用字符流。

3、Java中流类的超类主要由那些?

java.io.InputStream、java.io.OutputStream、java.io.Reader、java.io.Writer

4、FileInputStream和FileOutputStream是什么?
这是在拷贝文件操作的时候,经常用到的两个类。在处理小文件的时候,它们性能表现还不错,在大文件的时候,最好使用BufferedInputStream (或 BufferedReader) 和 BufferedOutputStream (或 BufferedWriter)

5、字节流和字符流,你更喜欢使用拿一个?
个人来说,更喜欢使用字符流,因为他们更新一些。许多在字符流中存在的特性,字节流中不存在。比如使用BufferedReader而不是BufferedInputStreams或DataInputStream,使用readLine()方法来一次性读取一行数据,但是在字节流中我们需要做额外的操作。

6、System.out.println()是什么?
println是PrintStream的一个方法。out是一个静态PrintStream类型的成员变量,System是一个java.lang包中的类,用于和底层的操作系统进行交互。

7、什么是Filter流?
Filter Stream是一种IO流主要作用是用来对存在的流增加一些额外的功能,像给目标文件增加源文件中不存在的行数,或者增加拷贝的性能。

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

有些Filter流的子类。LineNumberInputStream 给目标文件增加行号。DataInputStream 有些特殊的方法如readInt(), readDouble()和readLine() 等可以读取一个 int, double和一个string一次性的,

BufferedInputStream增加性能

PushbackInputStream推送要求的字节到系统中

9、说说PrintStream和PrintWriter
他们两个的功能相同,但是属于不同的分类。字节流和字符流。他们都有println()方法。

10、在文件拷贝的时候,那一种流可用提升更多的性能?
在字节流的时候,使用BufferedInputStream和BufferedOutputStream。
在字符流的时候,使用BufferedReader 和 BufferedWriter

11、说说管道流(Piped Stream)
有四种管道流, PipedInputStream,
PipedOutputStream, PipedReader 和 PipedWriter.在多个线程或进程中传递数据的时候管道流非常有用。

12、说说File类
它不属于 IO流,也不是用于文件操作的,它主要用于知道一个文件的属性,读写权限,大小等信息。

13、说说RandomAccessFile?
它在java.io包中是一个特殊的类,既不是输入流也不是输出流,它两者都可以做到。他是Object的直接子类。通常来说,一个流只有一个功能,要么读,要么写。但是RandomAccessFile既可以读文件,也可以写文件。 DataInputStream 和 DataOutStream有的方法,在RandomAccessFile中都存在。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值