1、数据流的基本概念
(1)流的分类
①流从流动方向上看:一般分为输入流和输出流
• 输入流:如System.in是一个InputStream类型输入流
• 输出流:如System.out 是一个PrintStream类型输出流
②从读取类型上分:一般分为字节流和字符流
• 字节流:如System.in是一个InputStream类型字节流
• 字符流:如new InputStreamReader(System.in)是一个字符流对象
③流从发生的源头:分为节点流和过滤流类
• 节点流:直接操作目标设备对应的流,如文件流,标准输入输出流
• 过滤流:继承带有关键字Filter的流,用于包装操作节点流,方便读写各种类型的数据
(2)Java的标准输入输出流
标准输入,对象是键盘,Java对应类是System.in。
标准输出,对象是屏幕,Java对应类是System.out。
标准错误输出,对象也是屏幕,Java对应类是System.err。
标准输入输出的转向,见JDK中的System类的静态方法 。
2、字节流与字符流
(1)字节流
(2)字节流
(3)ByteArrayInputStream 和 ByteArrayOutputStream
3、文件操作
(1)FileInputStream 和 FileOutputStream
FileInputStream构造方法:FileInputStream(String name) :以文件路径名字构造一个文件输入流,打开一个与实际文件的连接,用于从该流中读取文件字节流
FileOutputStream构造方法: FileOutputStream(String name) :以文件路径名字构造一个文件输出流,打开一个与实际文件的连接,用于文件的写字节流操作
(2) PipedInputStream和PipedOutputStream
通常用于将一个程序的输出连接到另一个程序的输入。
输出流作为管道的发送端,输入流作为管道的接收端。
使用前需要调用connect方法将输出流和输入流连接起来。
通常一个线程执行管道输出流的写操作,另一个线程执行管道输入流的读操作。
(3)字节流与字符流之间的转化
输入字节流转为字符流需要用到inputstreamReader的构造方法:InputStreamReader(InputStream in)
例如:InputStreamReader ins = new InputStreamReader(System.in);
InputStreamReaderins = newInputStreamReader(new FileInputStream(“test.txt”));
输出字符流转为字节流用到OutputStreamWriter或PrintWriter的构造方法: OutputStreamWriter(OutputStream out) 或 PrintWritr(OutputStream out)
例如:OutputStreamWriterouts = newOutputStreamWriter(new FileOutputStream(“test.txt”));
4、流的装配与串行化
(1)流的装配
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("foo.txt")));
等价于 PrintWriter out = new PrintWriter(“foo.txt”); //JDK1.5引入,简化编码,//仍然具有缓存功能
局限性:没有对应的输入流类用于恢复写入的Java基本类型数据
(2)流的串行化
串行化(Serialization):又称序列化,将实现了Seriallizable接口的对象转换成一个字节序列,并能够在以后将这个字节序列完全恢复为原来的对象,后者又称反序列化
串行化的目的:便于介质存储和网络传输
使用ObjectInputStream类和ObjectOutputStream类
(3)文件操作
例:将Write1.txt文件拷贝到当前目录的backup文件夹下:
(4)File类:public String[] list(FilenameFilter filter) 返回一个满足过滤器filter的文件列表
文件过滤器接口FilenameFilter,其包含一个抽象方法accept
例:列出当前目录中带过滤器的文件名清单,如:过滤出开头为w或W的文本文件
(5)随机文件操作
RandomAccessFile:文件指针可以随意定位,可以向前访问
构造方法:RandomAccessFile(File file, String mode)
RandomAccessFile(String name, String mode)
例:随机文件操作:对二进制文件primes.bin进行随机访问操作,先将2作为最小素数写入文件,再依次测试100以内的奇数,如果为素数,则写入文件尾