FORTUNE

THE WAY TO THE MASTER...
posts - 49, comments - 18, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

java 流与文件

Posted on 2006-03-14 16:13 fortune 阅读(1645) 评论(2)  编辑  收藏 所属分类: 我的学习笔记
在java中可以读出一系列字节的对象称为“输入流”,而能向其写入一系列字节的对象称为“输出流”。这2种对象分别是用抽象类InputStream和OutputStream来实现的。对于Unicode格式保存的信息(每个字符都用了2个字节来存储),有专门的类处理,这些类是从抽象类Reader和Writer继承而来。

java以这4个抽象类为基础,衍生出一系列具体的类,几乎可以完成所有的输入/输出过程。

InputStream类提供了一个抽象方法:abstract    int    read()
读取一个字节并将它返回,由此类衍生出来的其它具体类都会覆盖这个方法,以提供有用的功能。
类似的,OutputStream类定义了抽象方法abstract    int    write(int  b)

完成流的读写操作后应记住要用close()方法将其关闭。关闭输出流的同时也会刷新输出流使用的缓冲区:在缓冲区中等待组合成一个较大的数据包的临时存储的字符,都会通过网络传送出去。特别是,加入没有关闭一个文件,最后一个字节报可能永远都不会投递出去。

InputStream和OutputStream类允许我们读取单独的字节和字节数组,它们不对字符串及数字进行读写。DataInputStream和DataOutputStream允许对所有基本java类型进行读写。
对于Unicode文本,需使用Reader和Writer衍生出的类,它提供的基本方法和InputStream和OutputStream类似:abstract    int    read()
         abstract    int    write(int  b)
read方法返回的要么是个Unicode字符(0-65535间的一个整数)要么是-1(已抵达文件末尾)
无论是read还是write方法都会阻塞线程的运行,直到字节被实际读出或写入为止。利用available方法,我们可以检查目前能够读取的字节数。

int   byteAvailable     =    System.in.available();
if   (byteAvailable  〉 0)
{byte[]   data  =  new byte [byteAvailable];
   System.in.read(data);
}

FileInputStream 和 FileOutputStream 使我们能将磁盘文件和输入流及输出流关联起来。
FileInputStream fin = new FileInputStream("employee.dat");
也可以
File f = new File("employee.dat");
FileInputStream fin = new FileInputStream(f);

与InputStream and OutputStream 类似, 它也仅支持字节级的读写操作,只能从fin对象中读取字节和字节数组:byte b = (byte) fin.read();

FileOutputStream(String name)新建一个name指定的文件输出流,该方法会自动删除同名的任何现存文件!!!

文本流

二进制的输入输出速度很快效率很高但是人无法看懂这种格式。java使用的是Unicode字符

File, File(Input/Output)Stream, RandomAccessFile是处理本地文件的类

Data(Input/Output)Stream是一个过滤流的子类,借此可以读写各种基本数据, 在文件和网络中经常使用.如: readByte, writeBoolean等.

Buffered(Input/Output)Stream的作用是在数据送到目的之前先缓存,达到一定数量时再送到目的,用已减少阻塞次数.

Piped(Input/Output)Stream适合与一个处理的输出作为另一个处理的输入的情况



 
!要想以二进制格式写入数据,使用DataOutputStream,要想以文本格式写入数据,使用PrintWriter
二进制读入使用DataInputStream,可读取文本格式的数据Java并未提供这样的类。唯一用来处理文本输入的是BufferedReader类它包含了一个方法readLine。




评论

# re: java 流与文件  回复  更多评论   

2006-03-15 13:10 by 余灵
写的好经典啊`对我学习JAVA的人来说真是太有帮助了,谢谢楼猪

# re: java 流与文件  回复  更多评论   

2008-04-18 09:23 by Lianyisha
确实总结的特别好,受益了。谢谢楼主

只有注册用户登录后才能发表评论。


网站导航: