Java面试必备--Java IO篇

Java面试必备--Java IO篇
1. 讲讲IO里面的常见类,字节流、字符流、接口、实现类、方法阻塞
流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
Java流操作有关的类或接口:
Java流类图结构:
2. String 编码UTF-8 和GBK的区别?
GBK的中文编码是双字节来表示的,英文编码是用ASC||码表示的,既用单字节表示。但GBK编码表中也有英文字符的双字节表示形式,所以英文字母可以有2种GBK表示方式。为区分中文,将其最高位都定成1。英文单字节最高位都为0。当用GBK解码时,若高字节最高位为0,则用ASC||码表解码;若高字节最高位为1,则用GBK编码表解码。
UTF-8编码则是用以解决国际上字符的一种多字节编。码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码。对于英文字符较多的论坛则用UTF-8节省空间。
GBK包含全部中文字符,UTF-8则包含全世界所有国家需要用到的字符
GBK是在国家标准GB2312基础上扩容后兼容GB2312的标准(好像还不是国家标准)
UTF-8编码的文字可以在各国各种支持UTF8字符集的浏览器上显示。
3. 什么时候使用字节流、什么时候使用字符流?
字节:通常由8比特组成。由于通常用来编辑计算机上文本的单个字符,所以字节是很多的计算机架构中的内存的最小可寻址单元
字符:信息单元;大概相当于1个字母或者符号等。比如数字,字母,标点符号等。英文字符一般由1个字节组成。汉字一般由两个字节组成
所有字节流类都是InputStream或OutputStream的子类。最主要的两个是FileInputStream和FileOutputStream
字节流代表的是一种低级别的I/O,所以应该尽量避免使用。尤其是文本文件,包含的是字符,最好的方式是使用字符流。字节流只考虑用在最原始的I/O上。但是字节流是所有其他流的基础
所有的字符流类都是Reader和Writer的子类
字符流经常会“封装”字节流。字符流使用字节流来操作物理I/O,然后字符流执行字节和字符间的转换。比如,FileReader使用FileInputStream、FileWriter使用FileOutputStream
使用InputStreamReader可以将字节流转换成字符流;使用OutputStreamWriter类可以将字符流转换成字节流