java.io 包里定义了多个流类型。
所有流类型都继承自以下四种抽象流类型。
UTF-16 一个字符两个字节。
/****************
节点流与处理流的区别
常见节点流
分别是文件,内存中的数组,一个String,线程和线程通信的Pipe
继承自InputStream 的流类
InputStream 基本方法
int read( ); // 读取一个字节并以整数返回(0~255),到输入流末尾返回-1
int read( byte[ ] buffer) throws IOException ;
// 读取buffer长度的数据,装进缓冲区 buffer
// 返回实际读取的字节数,如果读取前已到输入流结尾则返回-1
// read 方法都记录已经读到的位置。
void close( ) throws IOException // 关闭流释放内存资源
System.in 是InputStream的一个子对象,是键盘输入流。
/********************
OutputStream 常用类
OutputStream 内常用方法
close方法不输出缓冲区的数据,直接关闭。
Reader和Writer 和以上方法类似,具体查API文档。java里char 占两字节。
int ch;
xxReader a=new xxReader("docpath");
ch=a.read( );
System.out.println((char)ch);
// 可以这么打印字符。
继承自OutputStream的FileOutputStream
FileOutputStream a=new FileOutputStream("D:/javatest/a.txt"); //当磁盘没有此文件时,新建此文件。
常见处理流 (处理其他节点流的类)
#Buffering是缓冲流
“套接”在相应节点流上,一次读很多,防止频繁小规模读写效率低,损害硬盘。
可以在缓冲区中标记位置,可以用mark,reset 等。
#转换流
Concerting between bytes and character
InputStreamReader i= new InputStreamReader(System.in); //先包装成字符读取,这里调用的就是转换流。
BufferedReader b=new BufferedReader( i ); // 把转化流再包装成缓冲流。
#数据流
可直接从中读取int double等类型。
Example:
这里的ByteArrayOutputStream是节点流,写入一个byte[ ] ,然后通过 .toByteArray( ); 获得byte数组。
DataOutputStream 是这里讲的数据类型的包装流。
#print流
如图设置处理流,可以调用System.setOut( ); 设置系统输出的位置,默认为命令行输出,这里向NewOut文件输出。
System.out 是PrintStream类型。
#Object流 -- 处理流
接口 Serializable , 类实现这个接口才能被转化为字节流。
这个接口为标记性接口,不需要重写方法。
writeObject( );
readObject( ); // 这两个方法读写一个对象。
Externalizable 接口,继承自Serializable接口,重写两个方法,自己控制对象的序列化过程。
transient 关键字。 修饰成员变量: transient int k = 15;
被transient修饰的变量在序列化时不予考虑,即当做没有。