|
FileOutputStream(File) 创建一个文件输出流,向指定的 File 对象输出数据。 FileOutputStream(FileDescriptor) 创建一个文件输出流,向指定的文件描述器输出数据。 FileOutputStream(String) 创建一个文件输出流,向指定名称的文件输出数据。 FileOutputStream(String, boolean) 用指定系统的文件名,创建一个输出文件。 PipedOutputStream:管道输出流是指一个通讯管道的发送端。 一个线程通过管道输出流发送数据, 而另一个线程通过管道输入流读取数据,这样可实现两个线程间的通讯。 PipedOutputStream() 创建一个管道输出流,它还未与一个管道输入流连接。 PipedOutputStream(PipedInputStream) 创建一个管道输出流,它已连接到一个管道输入流。 以字符为导向的stream Reader/Writer 以Unicode字符为导向的stream,表示以Unicode字符为单位从stream中读取或往stream 中写入信息。 Reader/Writer 为abstact类 以Unicode字符为导向的stream包括下面几种类型: -- Reader 1) CharArrayReader:与ByteArrayInputStream对应 CharArrayReader(char[]) 用指定字符数组创建一个 CharArrayReader。 CharArrayReader(char[], int, int) 用指定字符数组创建一个 CharArrayReader。 2) StringReader:与StringBufferInputStream对应 StringReader(String) 创建一新的串读取者。 3) FileReader:与FileInputStream对应 4) PipedReader:与PipedInputStream对应 -- Writer 1) CharArrayWrite:与ByteArrayOutputStream对应 2) StringWrite:无与之对应的以字节为导向的stream 3) FileWrite:与FileOutputStream对应 4) PipedWrite:与PipedOutputStream对应 两种不现导向的stream之间的转换 InputStreamReader和OutputStreamReader:把一个以字节为导向的stream转换成一个以字符为导向的stream。 一个 InputStreamReader 类是从字节流到字符流的桥梁:它读入字节,并根据指定的编码方式,将之转换为字符流。 使用的编码方式可能由名称指定,或平台可接受的缺省编码方式。 InputStreamReader 的 read() 方法之一的每次调用,可能促使从基本字节输入流中读取一个或多个字节。 为了达到更高效率,考虑用 BufferedReader 封装 InputStreamReader, BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); InputStreamReader(InputStream) 用缺省的字符编码方式,创建一个 InputStreamReader。 InputStreamReader(InputStream, String) 用已命名的字符编码方式,创建一个 InputStreamReader。 OutputStreamWriter 将多个字符写入到一个输出流,根据指定的字符编码将多个字符转换为字节。 每个 OutputStreamWriter 合并它自己的 CharToByteConverter, 因而是从字符流到字节流的桥梁。 FilterInputStream、RandomAccessFile 见例子。 ObjectInputStream 、 ObjectOutputStream见另外blog。 Java IO的一般使用原则: 一、按数据来源(去向)分类: 1、是文件: FileInputStream, FileOutputStream, FileReader, FileWriter 2、是byte[]:ByteArrayInputStream, ByteArrayOutputStream 3、是Char[]: CharArrayReader, CharArrayWriter 4、是String: StringBufferInputStream, StringReader, StringWriter 5、网络数据流:InputStream, OutputStream, Reader, Writer 二、按是否格式化输出分: 1、要格式化输出:PrintStream, PrintWriter 三、按是否要缓冲分: 1、要缓冲:BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter 四、按数据格式分: 1、二进制格式(只要不能确定是纯文本的): InputStream, OutputStream及其所有带Stream结束的子类 2、纯文本格式(含纯英文与汉字或其他编码方式);Reader, Writer及其所有带Reader, Writer的子类 五、按输入输出分: 1、输入:Reader, InputStream类型的子类 2、输出:Writer, OutputStream类型的子类 六、特殊需要: 1、从Stream到Reader,Writer的转换类:InputStreamReader, OutputStreamWriter 2、对象输入输出:ObjectInputStream, ObjectOutputStream 3、进程间通信:PipeInputStream, PipeOutputStream, PipeReader, PipeWriter 4、合并输入:SequenceInputStream 5、更特殊的需要:PushbackInputStream, PushbackReader, LineNumberInputStream, LineNumberReader 决定使用哪个类以及它的构造进程的一般准则如下(不考虑特殊需要): 首先,考虑最原始的数据格式是什么: 原则四 第二,是输入还是输出:原则五 第三,是否需要转换流:原则六第1点 第四,数据来源(去向)是什么:原则一 第五,是否要缓冲:原则三 (特别注明:一定要注意的是readLine()是否有定义,有什么比read, write更特殊的输入或输出方法) 第六,是否要格式化输出:原则二 | |