您的位置:首页 > 职场人生

黑马程序员-第二十二天( IO包中其它流对象)

2014-03-21 22:46 211 查看
----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

                              IO包中其它流对象
一,打印流
该流提供了打印方法,可以将各种数据类型的数据都原样打印。
PrintStream(字节打印流)
构造函数可以接收的参数类型:file对象 ,字符串路径,字符输出流(OutputStream)
PrintWriter(字符打印流):
构造函数可以接收的参数类型:file对象 ,字符串路径,字符输出流(OutputStream),字符输出流(Writer)(只有流才会自动刷新)

注:此流中的方法不会抛出IOException,当构造函数为file对象,字符串路径时会抛出IOException异常

二。合并流(将多个读取流合并成一个流)
SequenceInputStream
构造方法:
SequenceInputStrema(Enumation<? extends InputStream > enum);
SequenceInputStream(InputStream input,InputStream input1);

三,操作对象的流
被操作的对象需要实现Serializable(标记接口)
1, ObjectInputStream
构造函数:
ObjectInputStream(InputStream in);
方法:
Object readObject():从ObjectInputStream读取对象
ObjectOutputStream :构造时必有要有一个目的,可以操作基本数据类型
构造函数 :ObjectOutputStream(OutputStream out)
方法:void  writeObject(Object obj);

2, Serializable:没有方法的接口称为标记接口。此接口中没有任何方法

3,固定化UID
static final long serialVersionUID = 42L

4, 实现Serializable接口其实就是给这个类加一个serialVersionUID号  ID标识通常是给编译器使用的。 UID是根据类中的成员(数字标识/数字签名)算出来的 

5,
 静态不是能被序列化的,静态的成员存在于方法区中,如果非静态成员也不想进行序列化,,加上transient.保证其值在堆内存中存在,也不在文本文件中存在


6, 序列化后的文件一般都以.object结尾

四。管道流(涉及到多线程的技术)
PipedInputStream
PipedOutputStream中的write方法是写到流中
输入输出可以直接进行连接,通过结合线程使用
1,相连接的方法:
·构造函数 :
PipedInputStream(PipedOutuputStream pos)创建 PipedInputStream,使其连接到管道输出流 src。
PipedInputStream(PipedOutputStream src,int pipeSize): 创建一个 PipedInputStream,使其连接到管道输出流 src,并对管道缓冲区使用指定的管道大小。

PipedOutputStream(PipedInputStream snk)  创建连接到指定管道输入流的管道输出流。
·对象中的方法:
PipedInputStream 中的connect(PipedOutputStream src);
PipedOutputStream 中的connect(PipedInputStream snk)

五。随机流:
RandomAccessFile
该类不算是IO体系中子类,而是直接继承自Object,但是它是IO包中成员,因为它具备读和写功能。内部封装了一个数组,而且通过指针对数组
的元素进行操作。可以通过getFilePointer获取指针的位置,同时可以通过seek改变指针的位置。其实完成读写的原理是内部封装了字节输入流和输出流

构造函数:

RandomAccessFile(File file,String mode)

     创建从中读取和向其中写入(可选)的随机访问文件流,该文件由
File
参数指定。
RandomAccessFile(String name,String mode)


          创建从中读取和向其中写入(可选)的随机访问文件流,该文件具有指定名称。
通过构造函数可以看出,该类只能操作文件 而且操作文件还有模式:只读r,读写rw等。
如果模式为只读r.不会创建文件。会去读取一个已经存在的文件,如果该文件不存在,则会出现异常。
如果模式为rw,操作的文件不存在,会自动创建,如果存在不会覆盖。
通过skipByte(int x,)(跳过指定的字节数),seek(int x)(设置指针的位置)来达到随机访问

六,可以用于操作基本数据类型的流对象 (是按照数据所占字节的大小进行存储的)
DataInputStream
DataOutputStream 
构造函数 :必须接收一个流进来,,
DataInputStream(InputStream in)
DataOutputStream(OutputStream out)
注:当用此流将数据写入到指定的文件中时,使用记事本打开是看不懂的,因为记事本会去查GBK的编码表

特殊方法:
void writeUTF(String str):   以与机器无关方式使用 UTF-8 修改版编码将一个字符串写入基础输出流。英文不涉及编码
String readUTF();从包含的输入流中读取此操作需要的字节
UTF-8:一个汉字占3个字节
UTK修改版:一个汉字占4个字节
GBK:一个汉字占2个字节

七,操作字节数组的流对象(这个两个流对象操作的数组,不会调用底层资源,不用进行close关闭)
ByteArrayInputStream
介绍:
ByteArrayInputStream 包含一个内部缓冲区,该缓冲区包含从流中读取的字节。内部计数器跟踪 read 方法要提供的下一个字节。 
关闭 ByteArrayInputStream 无效。此类中的方法在关闭此流后仍可被调用,而不会产生任何 IOException。 
构造函数:在构造的时候,需要接收数据源,而且数据源是一个字节数组。
ByteArrayInputStream(byte[] buf) 创建一个 ByteArrayInputStream,使用 buf 作为其缓冲区数组。 
ByteArrayInputStream(byte[] buf, int offset, int length)  创建 ByteArrayInputStream,使用 buf 作为其缓冲区数组。 
ByteArrayOutputStream
介绍:
此类实现了一个输出流,其中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray() 和 toString() 获取数据。 
关闭 ByteArrayOutputStream 无效。此类中的方法在关闭此流后仍可被调用,而不会产生任何 IOException。 
构造函数:在构造的时候,不用定义数据目的,因为该对象中已经在内部封装了可变长度的字节数组。这就是数据目的地。
ByteArrayOutputStream()   创建一个新的 byte 数组输出流。 
ByteArrayOutputStream(int size)   创建一个新的 byte 数组输出流,它具有指定大小的缓冲区容量(以字节为单位)。 
特有方法:
void writeTo(OutputStream out);会抛出异常

注:对数组数据的操作只有修改和获取,,对应流就是读写。用流的思想来操作数组

设备所对的流对象

源: 键盘(System.in) 硬盘(FileStream) 内存(ArrayStream)

目的: 控制台(System.out) 硬盘(FileStream) 内存(ArrayStream)
八,操作字符数组的流对象
CharArrayReader
介绍:
此类实现一个可用作字符输入流的字符缓冲区。 
构造函数:
CharArrayReader(char[] buf)    根据指定的 char 数组创建一个 CharArrayReader。 
CharArrayReader(char[] buf, int offset, int length)  根据指定的 char 数组创建一个 CharArrayReader。 

CharArrayWriter
介绍:
此类实现一个可用作 Writer 的字符缓冲区。缓冲区会随向流中写入数据而自动增长。可使用 toCharArray() 和 toString() 获取数据。
注:在此类上调用 close() 无效,并且在关闭该流后可以调用此类中的各个方法,而不会产生任何 IOException。 
构造函数:
CharArrayWriter()       创建一个新的 CharArrayWriter。 
CharArrayWriter(int initialSize)   创建一个具有指定初始大小的新 CharArrayWriter。 

九,操作字符串的流对象
StringReader
介绍:
其源为一个字符串的字符流。
构造函数:
StringReader(String s)    创建一个新字符串 reader。
StringWriter
介绍:
一个字符流,可以用其回收在字符串缓冲区中的输出来构造字符串。 
关闭 StringWriter 无效。此类中的方法在关闭该流后仍可被调用,而不会产生任何 IOException。

构造函数:
StringWriter()   使用默认初始字符串缓冲区大小创建一个新字符串 writer。 
StringWriter(int initialSize)   使用指定初始字符串缓冲区大小创建一个新字符串 writer。 

----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息