按功能方向性分,可分为输入,输出流,又可分为节点流,处理流;又可分为8bit字节流,16bit字符流。
如果是Reader结尾的都是字符流,以Stream结尾的都是字节流。
对于输出的缓冲流,写出的市局会先在内存中缓存,使用flush方法将会使内存中的数据立刻写出。
转换流:InputStreamReader和OutputStreamWriter用与字节数据到字符数据之间的转换。
FileOutputStream("文件",true)表示在文件内容后追加。
getEncoding()得到字符编码 ----ISO8859-1 是latin-1 西欧语言
Print流, PrintWriter 和PrintStream都是属于输出流,分别针对字符和字节。
println方法用于多种数据类型的输出。
System.setOut(PrintStream)。重新设置out的值。
直接将Object写入或读出
transient关键字 表示透明的.不考虑
serializable接口 ,标记性接口 序列化
externalizable这个接口继承于serializable ,外部的,自己控制序列化过程
System.in连接到键盘,是InputStream类型的实例对象。
system.out连接显示器,是PrintStream类的实例对象。
InputStream的read方法总是返回-1来表示输入流的结束。
DataInputStream和DataOutputStream,过滤流,需要使用已经存在的节点流来构造,提供了读写Java中的基本数据类型的功能。
PipedInputStream和PipedOutputStream,管道流,用于线程间的通信。一个线程的PipedInputStream对象从另一个线程的PipedOutputStream对象读取输入。要使管道流有用,必须同时构造管道输入流和管道输出流。
程序---DataOutputStream--->BufferedOutputStream->FileOutputStream --->文件 (写入)
程序-<----DataInputStream-<----BufferedInputStream<----FileInputStream<-----文件 (读取)
字节流转换字符流
InputStream-->InputstreamReader ---> BufferedReader--->File Reader
将一个字节流中的字节码字符后读取
OutputStream-->OutputStreamWriter--->BufferedWriter--->File Writer
讲字符编码成字节后写入到一个字节流中
字符编码
字符a对应数字97, b对应98等. 这种字符与数字对应的编码规则称为ASCII 。它的最高bit位都为0。也就是这些数字在(0-127之间)。
中文字符的每个字符2个字节,最高位为1。
ISO(国际标准化组织)将世界所有文字统一编码,称值为Unicode编码。中国的"中"发到任何一个国家本地化系统中仍然是"中"。Unicode编码的字符占2个字节,范围2的16次方(65553)。
UTF-8 /u0001和/u007f之间的字符,utf-8编码为(byte)c ,原来的字符。
UTF-16 编码在Unicode编码上增加了对Unicode编码没有的那些字符的表示方式。
\u开头的是一个Unicode码的字符,每一个'\u0000'都代表了一个空格
通常中文在的显示都是被转化为Unicode显示的.
Unicode可同时包含65536个字符,ASCII/ANSI只包含255个字符,实际上是Unicode的一个子集。Unicode字符通常用十六进制编码方案表示,范围在'\u0000'到'\uFFFF'之间。\u0000到\u00FF表示ASCII/ANSI字符。\u表示这是一个Unicode值.
更正,\u0000代表的应该是NULL,输出控制台是一个空格...
Unicode中的前128个编码与ASCII码是相同的。
字节流转换
PrintWrite的println方法根据系统不同,输出文本标识符,windows下“/r/n”,Linux下是"/n"
==========================
管道通信,实现各个模块之间的松耦合通信 。
Sender.java Receiver.java main
---------------------------------------------------------------------
---------------------------------------------------------------------------
====================================================================
ByteArrayInputStream ,ByteArrayOutputStream
用于以IO流的方式完成对数组内容的读写,来支持类似内存虚拟文件或者内存映像文件的功能。
===============================
RandomAccessFile........... 任意访问文件流