Posted on 2006-03-14 16:13
fortune 阅读(1655)
评论(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。