源:
键盘 System.in 硬盘 FileStream 内存 ArrayStream
目的:
控制台 System.out 硬盘 FileStream 内存 ArrayStream
处理大文件或者多线程下载\上传
RandomAccessFile 或者内存映射文件
方便对对象的永久化存储和调用
ObjectStream
方便操作打印流
PrintWriter 和 PrintStream
序列流,对多个流进行合并
SequenceInpuntStream
管道流,输入和输出可以直接连接,通过结合线程使用
PipedInputStream PipedOutputStream
方便操作基本数据类型
DataInputStream DataOutputStream
方便操作字节数组
ByteArrayInputStream ByteArrayOutputStream
方便操作字符数组
CharArrayReader CharArrayWriter
方便操作字符串
StringReader StringWriter
字符编码:
字符流的出现为了方便操作字符,更重要的是加入了字符转换.
字符转换通过转换流来完成
InputStreamReader
OutputStreamWriter
在两个对象进行构造时可加入字符集
编码;
字符串变成字节数组
String --> byte[] str.getBytes()(按照平台默认的字符集) str.getBytes(String charsetName)(按照指定字符集编码)
解码:
字节数组变字符串
byte[] --> String new String(byte[]) new String(byte[], charsetName)(按照指定的字符编码)
常见的字符集:
ASCII:美国标准信息交换码
用一个字节的7位就可以表示
IOS8859-1:拉丁码表\欧洲码表
用一个字节的8位表示
GB2312:中国的中文编码表
GBK:中文编码表升级,融合了更多的中文字符
Unicode:国际标准编码,融合了多种文字
所有字符都用两个字节表示,java语言就是用的unicode
UTF-8:用3个字节来表示一个汉字