本篇文章主要记录关于IO的基础知识与面试问题
1)它是一种将数据流从源头流到目的地。好比文件拷贝,就包括了输入(复制)输出(粘贴)流 2)主要包括File、InputStream、OutputStream、Reader、Writer五大类,Serialize接口
1)两种,字节流,字符流 2)字节流为:InputStream、OutputStream 3)字符流为:Reader、Writer
1)若传输的资源为:图片、视频、音频等,按字节排列的资源,字节流相对更好 2)若传输的资源为:字符串、汉字等,按字符排列的资源,字符流相对更好
1)缓冲区就是一块特殊的内存区域。不少状况下当程序须要频繁操做一个资源(如文件或数据库)性能会很低,因此为了 提高性能,就能够将部分资源读写到缓冲区上,之后直接今后区域读写数据便可,这样就显著提高了性能 2)Java中字符流的操做都是在缓冲区进行的,因此在使用字符流操做资源时若想主动将资源刷新到文件中, 则可使用flush()方法
1)字节流和字符流的使用大部分很是类似,字节流是直接操做文件自己的不通过缓冲区, 但字符流的操做所有是通过缓冲区的,因此若不使用close(),是不会输出任何内容的, 同时也可使用flush()来强制刷新缓冲区,以达到不使用close()也可以输出内容 2)字节流处理的是字符、字符数组和二进制对象 字符流处理的是字符、字符数组和字符串
1)将一个对象表示为一个字节序列,能够对序列化的对象进行读写操做, 好比将该序列化对象写入文件中,再从文件中读取出来,反序列化该对象 由于此过程是在JVM中进行的,因此能够实如今一个平台序列化的对象,在另外一个彻底不一样的平台反序列化该对象 2)在须要序列化的类上实现接口Serialize接口,没有须要实现的方法,此接口只是标识对象可被序列化, 而后使用一个输出流(如:FileOutputStream)来构造一个对象流(如:ObjectOutputStream)对象,再调用对象流对象 的writeObject(Obj obj)就能够将参数obj进行输出
1)属于处理流中的缓冲流 2)能够将读取的内容存入内存中 3)readLine(),用于读取一行
1)节点流直接与数据源相连,进行输入输出 2)处理流是在节点流的基础上进行加工,扩展其功能 3)处理流的建立必须在构造器中传入节点流的子类
1)须要关闭,由于IO流比较占用资源,使用close()方法 2)通常在finally代码块里,由于一般来讲无论代码是否被try-catch,finally都会执行 3)处理流也是使用close()方法关闭流 4)流的关闭顺序通常是,先使用后关闭,后使用先关闭,若是是使用处理流依赖节点流,就是先关闭处理流,再关闭节点流 也能够只关闭处理流,处理流关闭时会调用节点流的关闭方法
1)返回所读取的字节的int型,范围-1~255(源码中用@Range(from=-1,to=255)), 若未读取到内容则返回-1 2)将所读取的字节放入data字节数组中,返回的是读取到data字节数组的字节个数 PS:read0()源码中涉及到一个关键词,native,这是用来声明与底层C语言代码相关
1)将指定字节写入数据源 2)byte b[]是指定写入数据源的字节数组,字符串可使用方法getBytes()来转换成字节数组, getBytes()中也能够指定写入时的字符编码,默认为ISO-8859-1 int off,是指定写入字节的起始位置 int len,是指定写入字节的结束位置,如写入字节为"hello world",int off为1,int len为5,则写入的为"ello", 即左闭右开
https://zhuanlan.zhihu.com/p/...html
https://www.cnblogs.com/huang...程序员
https://blog.csdn.net/qq_3787...面试
做为新人程序员,深知本身与同行间的差距。因此很是欢迎你们在评论区指出文章中的不足之处。MO_or定及时纠正。数据库