来源:互联网 发布:ubuntu怎么切换到root 编辑:程序博客网 时间:2024/05/01 21:42
 

今天老师主要讲了流的分类,老师将讲的这些我觉的理解起来有些困难,课下看书有时也不是很理解做起作业来也非常困难。虽然有很大的困难和苦恼但是并不会击垮我要学的信心。

流的分类:

1按数据流动方向

    • 输入流:只能从中读取字节数据,而不能向其写出数据

    • 输出流:只能向其写入字节数据,而不能从中读取数据

2按照流所处理的数据类型

    • 字节流:用于处理字节数据。

    • 字符流:用于处理Unicode字符数据

3按照流所处理的源

    • 节点流:/向一个特定的IO设备读/写数据的流

处理流:对已存在的流进行连接和封装的流。

过滤流

抽象的InputStreamOutputStream类允许我们对字串及数字进行读写。为达到这个目的,还需要功能更多的子类。例如:DateInputStreamDataOutputStream允许我们对所有基本的java类型进行读写。

文件流类与抽象的InputStreamOutputStream类相似,这些类也只支持字节级的读写操作。换言之,只能从fin对象中读取字符和字节数组。byte b=fin.read(),他们没有提供专门的数值类型,所以DataInputStream没有办法从一个文件中获取数字。


解决方案:java给流职责分工,某些流(FileInputStream)负责从文件或另一些更特殊的地方读入字节数据。而另一些流

DataInputStreamPrintWriter)负责将字节“组装”成更有用的数据类型。必须综合运用这两种流,将其合并成所谓的"过滤流(FilteredStreams",方法是将一个现成的流传递给另一个流的构建器。

字节缓冲流

1 BufferedInputStream

2 BufferedOutputStrem


类的构造及成员详见文档


默认情况下,流不会进行缓冲。即每读一次,都会要求操作系统提供一个字节。通过BufferedInputStream

BufferedOutputStream对流构建器进行过滤分层,实现缓冲。


1、构造函数:


BufferedInputStream(InputStream in)

BufferedInputStream(InputStream in, int size) //size:缓冲区的大小

BufferedInputStream bis=new BufferedInputStream(System.in);

BufferedInputStream bis=new BufferedInputStream(System.in ,100);

//用缓冲字节流实现文件读写

import java.io.*;

publicclass BufferedIOTest {

publicstaticvoid main(String[] args) {

try{

FileOutputStream fos =new FileOutputStream("res/new.txt");

BufferedOutputStream bos =new BufferedOutputStream(fos);

DataOutputStream dos =new DataOutputStream(bos);

dos.writeUTF("good morning!");

dos.writeInt(250);

dos.close();

bos.close();

fos.close();

FileInputStream fis =new FileInputStream("res/new.txt");

BufferedInputStream bis =new BufferedInputStream(fis);

DataInputStream dis =new DataInputStream(bis);

System.out.println(dis.readUTF() + "\n"+ dis.readInt());

dis.close();

bis.close();

fis.close();

}catch(Exception e){

e.printStackTrace();

}

}

}

原创粉丝点击