本帖最后由 苏阿合 于 2018-12-31 00:51 编辑
1.什么是输入流?什么是输出流?
IO流按照流动的方向,以内存为基准,分为输入流和输出流
输入流:把数据从硬盘中读取到内存中的流
输出流:把数据从内存中写出到硬盘中的流
2.输入流读取有几种方式,输出流写出有几种方式?
(1)输入流分为字节输入流和字符输入流;输出流分为字节输出流和字符输出流
(2)输入流中的字节输入流的读取方式有2种:(1)int read() :一次读一个字节,(2)int read(byte[] b)一次读一个字节数组;字符输入流:字符输入流的读取方式有2种,(1)int read() 一次读一个字符,(2)int read(byte[] b)一次读一个字符数组。
(3)输出流中的字节输出流的读取方式有3种:(1)void write(int b) 一次写一个字节(2)write(byte[] b)一次写一个数组(3) void write(byte[] b, int off, int len)一次写一个数组的一部分;字符输出流读取方式有5种:(1)void write(int c) 一次写一个字符,(2)void write(char[] cbuf)一次写一个字符数组,(3)void write(char[] cbuf, int off, int len)一次写一个字符数组的一部分,(4)write(String str)一次写一个字符串,(5)write(String str, int off, int len)一次写一个字符串的一部分
3.字符流和字节流的区别?
(1)字节流在读取一段文本输入的时候将一个字符拆成对应字节数,任何再进行一个个字节的传输,而我们在读取的时候会根据ASCII编码表找单个字节的十进制对应的字符,就会造成没有对应上,造成乱码。而字符流是将一个字符拆成对应字节数进行打包后,然后再进行字节传输,而我们在读取的时候会根据打包的字节数对应编码表找打包的字节数的十进制对应的字符不会造成乱码 (2)字符流进行写文件的时候要进行刷新缓冲区,不然缓冲区中的数据会存在缓冲区,而不会写入文件中,而字节流不用。 4.JDK7之前,JDK7和JDK7之后对IO流异常的处理有什么变化?
JDK7之前有两种方式对IO流的异常处理
(1)使用throws将异常抛出,但是如果有异常会直接停止程序,而没有关闭流,会造成内存资源的浪费。
(2)使用try...catch处理异常要在finally位置关闭流,因为作用域问题需要在tay...catch的外部对流对象进行赋值,但我们在进行关流的时候要对流对象进行判断是否为null,如果为null就不能调用close,否则会抛出空指针异常,代码很复杂。
JDK7把创建流对象直接放到try后的()中,且JDK7在try...catch中提供了关流的操作,无需再使用finally来关闭流通道了。
JDK9之后流对象在try...catch外面创建,把流对象的对象名写在try后的()中,JDK9也在try...catch中提供了关流的操作,无需再使用finally来关闭流通道了,但JDK9由于创建流对象写在try...catch外面所以需要将文件找不到异常继续进行处理thows出。
|