常用流

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接口,在对象序列化时,也通

向要求这个类中属性都能够对象序列化(基本类型除外)。


注意:

对于对象流的操作,在写对象时要一次写入完毕,如果使用追加模式写入,只会读取到

上一次写入的对象,使用对象流写入是,会先写入一个头部,然后写入一个数据,最后

加上结束符号,如果使用追加方式写入的话,那就会在结束符号继续向下写入,但是在

读取时只会读到结束符为止,以后再次写入的数据就会丢失。


包名、类名和属性可以被序列化,方法和构造器不会被序列化的。

静态属性不会被序列化。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值