一、OutputStream
所有输出字节流的父抽象类,包括write(),flush(),close()等方法
二、FileOutputStream
正常的文件输出字节流,每调用一次write(),可以写入文件一个字节或几个字节,直接对磁盘进行操作。
String txt = "我是中国人"; byte[] b2 = txt.getBytes(); try { FileInputStream is = new FileInputStream(file); FileOutputStream os = new FileOutputStream(file2); os.write(b2); os.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }这个字节流实例可以将中文写入文件中,因为 getBytes()方法内部调用 StringCoding.encode()方法使用默认编码将字符编码为字节,然后os.write()方法使用默认本地方法writeBytes()使用默认编码将字节转换为字符写入文件。所以字节流也可以写中文字符
三、ByteArrayOutputStream
先通过构造函数来确定一个字节缓冲区大小,如果不设定,则有一个默认值为32。然后使用write()方法将缓冲区内容写入文件中。缓冲区会随着数据的不断写入而自动增长(grow()方法)
四、PipedOutputStream
在java中,PipedOutputStream和PipedInputStream分别是管道输出流和管道输入流。它们的作用是让多线程可以通过管道进行线程间的通讯。在使用管道通信时,必须将PipedOutputStream和PipedInputStream配套使用。
使用管道通信时,大致的流程是:我们在线程A中向PipedOutputStream中写入数据,这些数据会通过connect()方法自动的发送到与PipedOutputStream对应的PipedInputStream中,进而存储在PipedInputStream的缓冲中;此时,线程B通过读取PipedInputStream中的数据。就可以实现,线程A和线程B的通信。
五、ObjectOutputStream
ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream。可以使用 ObjectInputStream 读取(重构)对象。通过在流中使用文件可以实现对象的持久存储。如果流是网络套接字流,则可以在另一台主机上或另一个进程中重构对象。
必须使用Serializable接口进行序列化操作,writeObject 方法负责写入特定类的对象状态,以便相应的 readObject 方法可以恢复它。该方法通过DataOutputStream来实现。
六、FilterOutputStream
继承了OutputStream类,可以被实例化,因为源码中FilterOutputStream的构造函数是public类型,而FilterInputStream的构造函数是protected类型的,所以无法被实例化(为什么这么设计还在找原因)。不过FilterOutputStream封装的write方法比较简单,一般不用,用的时候都用它的几个子类。主要包括BufferedOutputStream, DataOutputStream和PrintStream。
继承FilterOutputStream的类
七、BufferedInputStream
BufferedOutputStream每次磁盘io时读取的byte[]数组很多,默认大小是8192,也就是有一个8M的缓冲区,每次写数据时先将数据写入缓冲区字节数组中。需要注意的是,每次写数据完毕都必须使用flush()方法或者close()方法将缓冲区内的数据强制写入文件中,否则不会写入到文件
八、DataOutputStream
DataOutputStream可以将各种JAVA基本类型和String类型写入文件中,内部使用的字节流,只是封装的更好了一点。
十、PrintStream
PrintStream 为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。另外,为了自动刷新,可以创建一个 PrintStream;这意味着可在写入byte 数组之后自动调用 flush 方法,可调用其中一个 println 方法,或写入一个换行符或字节 ('\n')。PrintStream 打印的所有字符都使用平台的默认字符编码转换为字节。在需要写入字符而不是写入字节的情况下,应该使用 PrintWriter 类。java中最常用的System.out.println就是使用System类的静态PrintStream对象out的println方法。