3 DataOutputStream和DataInputStream
DataOutputStream:数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中。然后,应用程序可以使用数据输入流将数据读入。对于基本的数据类型都提供了writeXXX的方法(XXX代表基本数据类型)。
DataInputStream:数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。DataInputStream 对于多线程访问不一定是安全的。线程安全是可选的,它由此类方法的使用者负责。对于基本数据类型提供了对应的readXXX方法(XXX代表对应的基本数据类型)。
这两个类都需要OutStream或者InputStream对象作为参数来创建对象。下面我们看一个简单的例子:
我们可以在C盘下找到我们创建的1.txt文件,打开之后我们看到却是乱码,但是最后输出的时候还是正确的。这是因为存储的时候,我们存储的是用字节的方式存储的。这种文件有时候可以实现我们保存一些私密数据,别人可以打开但是看不懂。
4 PipedOutputStream和PipedInputStream
上面我们介绍的BufferedOutputStream和BufferedInputStream、DataOutputStream和DataInputStream属于过滤流类,它们共同的直接基类是FilterOutputStream和FilterInputStream。而FileOutputStream和FileInputStream、PipedOutputStream和PipedInputStream、FilterOutputStream和FilterInputStream的共同直接父类是OutputStream和InputStream。
PipedOutputStream:以将管道输出流连接到管道输入流来创建通信管道。管道输出流是管道的发送端。通常,数据由某个线程写入 PipedOutputStream
对象,并由其他线程从连接的 PipedInputStream
读取。不建议对这两个对象尝试使用单个线程,因为这样可能会造成该线程死锁。如果某个线程正从连接的管道输入流中读取数据字节,但该线程不再处于活动状态,则该管道被视为处于毁坏状态。
PipedInputStream:道输入流应该连接到管道输出流;管道输入流提供要写入管道输出流的所有数据字节。通常,数据由某个线程从 PipedInputStream
对象读取,并由其他线程将其写入到相应的 PipedOutputStream
。不建议对这两个对象尝试使用单个线程,因为这样可能死锁线程。管道输入流包含一个缓冲区,可在缓冲区限定的范围内将读操作和写操作分离开。如果向连接管道输出流提供数据字节的线程不再存在,则认为该管道已损坏。
管道流主要用于线程间的通信,下面我们写一个例子程序:
为了能一张图片截图,所以有些缩进的格式不正确,读者自己对正。
如果哪里写错了,还请指出。