1.字节输入流:InputStream类为所有输入流的父类。
三个基本的read()方法:
int read()
//从流里读出一个字节,不推荐使用
int read(byte[]b)
//将数据读入到字节组中,并返回所读的字节数
int read(byte[] b,int off, int len)
//off 从哪里开始读。
//len 读取多少
//将输入流中最多len个字节读入字节数组
其他方法:
void close()
//关闭此输入流并释放与该流相关的所有资源系统
int availabel()
//返回不受阻塞地从此输入流读取的字节数
longskip(long n)
//跳过和放弃此输入流中的n个字节,该方法可能失效。
boolean markSupported()
//测试此输入流是否支持mark和reset方法。
void mark(int n)
//从此输入流中标记当前位置
void reset()
//将此流重新定位到对此输入流最后调用mark方法时的位置
字节输出流:OutputStream类是所有字节输入流的父类。
三个基本的write()方法:
void write(int n)
//将指定的字节写入此输出流。
void write(byte[ ] b)
//将b.length个字据诶从指定的字节数组写入此输出流。
void write(byte[ ] b,int off, int len)
//offset偏移量
//将指定字节数组中从偏移量off开始的len个字节写入此输出流。
其他方法:
void close()
//关闭此输出流并释放与此流相关的所有系统资源
void flush()
//刷新此输出流并强制写出所有缓冲流的输出字节
文件输入输出流:FileInputStream和FileInputStream要构造一个FIleInputStream,所关联的文件必须存在而且是可读的。
如:
FileInputStream fis=new FileInputStream("myfile.dat");
要构造一个FIleOutputStream,而输出文件已经存在,则它将被覆盖。
如:
FileOutputStream fos=new FileOutputStream("myfile.dat");
要想以追加的方式写,则需要一个额外的参数,如:
FileOutputStream fos=new FileOutputStream("myfile.dat",true);
//参数为true时输出为追加,为false时为覆盖。
2.Reader和Writer是所有字符流的父类。
桥梁流:InputStreamReader和OutputStreamWriter(字节流转化成字符流的桥转换器)
这俩个类是不可以直接输入输出的,它是将字节流转换成字符流的桥转换器,并可以知道编解
码方式。逐行读写流:BufferedReader/BufferedWriter
以上俩个都是过滤流,需要用其他的节点流来作参数构造对象。
BufferedReader的方法:
readLine():String,当它的返回值是null时,就表示读取完毕了。要注意,在写入时要注意
写换行符,否则会出现阻塞。
BufferedWriter的方法:
newLine(),这个方法会写出一个换行符。
对象流:ObjectInputStream/ObjectOutputStream(实现对象序列化)
对象流是过滤流,需要节点流作参数来构造对象,用于直接把对象写入文件和从文件中
读取对象。只有实现了Serializeble接口的类型的对象才可以被读写,Serializebel接口是
标记接口,其中没有定义方法。对象会序列化成为一个二进制代码,文件中保持对象的
属性。
writeObject()、readObject()这两个是对象读写操作时用的方法。
Object o=new Object();
FileOutputStream fos=newFileOutputStream("Object.txt");
ObjectOutputStream oos=newObjectOutputStream(fos);
oos.writeObject(o);
oos.close();
一个类中有其他类型的对象,那么这个类实现了Serializable接口,在对象序列化时,也通
向要求这个类中属性都能够对象序列化(基本类型除外)。
注意:
对于对象流的操作,在写对象时要一次写入完毕,如果使用追加模式写入,只会读取到
上一次写入的对象,使用对象流写入是,会先写入一个头部,然后写入一个数据,最后
加上结束符号,如果使用追加方式写入的话,那就会在结束符号继续向下写入,但是在
读取时只会读到结束符为止,以后再次写入的数据就会丢失。
包名、类名和属性可以被序列化,方法和构造器不会被序列化的。
静态属性不会被序列化。