您的位置:首页 > 其它

IO流(4)io包其他功能流对象

2015-07-13 22:15 435 查看

IO包中的其他功能流对象。

功能流对象,特点:解决问题,特有方法

打印流 -- 输出流

***PrintStream:

PrintStream(字节流) PrintWriter(字符流)

特点:打印。不抛异常

打印的目的:File对象,字符串路径,字节输出流

解决问题: 方便地打印各种数据值表现形式。

它的打印方法可以保证数值的表现形式不变。写的是什么样子,目的就是什么样子。

PrintStream out = new PrintStream("tempfile\\print2.txt");

out.write(353);// 结果为a ,一次读最低的一个字节

out.print(97);// 97 保证数值的表现形式,其实原理就是将数值转成字符串。

字节流的write 方法一次只写出一个字节也就是将一个整数的最低8位写出

***PrintWriter:

一样具备打印功能。 目的:File对象,字符串路径,字节输出流,

字符输出流。

BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

PrintWriter pw =new PrintWriter(System.out,true);// 对println方法可以实现自动刷新

//目的为文件,且自动刷新:

pw = new PrintWriter(new BufferedWriter(new FileWriter("1.txt")),true);

while(line=bufr.readLine()!=null)

pw.println(line.woUpperCase());

pw.close();

// bufr.close(); // 不需要关闭键盘录入这种标准输入流,一旦关闭,后面获取不到。

****序列流(SequenceInputStream):

特点: 流对象的有序的排列

解决问题:将多个输入流合并成一个输入流。将多个源合并成一个源。对于多个源的操作会变的简单

功能: 特殊之处在构造函数上,一初始化就合并了多个流进来

使用场景之一:对多个文件进行数据的合并。多个源对应一个目的。

ArrayList<FileInputStream> a1 = new ArrayList<FileInputStream>();

for(int x =1; x<=3;x++)

{

a1.add(new FileInputStream("tempfile\\"+x+".txt"));

}

Enumeration<FileInputStream> en = Collections.enumeration(a1); // 获取枚举

SequenceInputStream sis = new SequenceInputStream(en);

FileOutputStream fos = new FileOutputStream("teampfile\\4.txt");

byte[] buf=new byte[1024];

int len = 0;

while((len=sis.read(buf))!=-1){

fos.write(buf,0,len);

}

用于操作对象的流对象: ObjectInputStream 与ObjectOutputStream (序列化和反序列化)

被操作的对象需要实现Serializable(标记接口)

解决问题:可以将对象进行序列化和反序列化。 注意:对象序列化一定要实现Serializable接口,为了给类定义一个serialVersionUID

功能:ObjectInputStream readObject() ObjectOutputstream writeObject()

-----

Person类的对象如果需要序列化,就需要实现Serializable标记接口

该接口给需要序列化的类,提供一个序列版本号,serialVersionUID

该版本号的目的在于验证序列化的对象和对应类是否版本匹配

不匹配导致InvalidClassException

解决: 给类显示声明一个序列版本号

***关键字:瞬态:transient

要想将字段不被序列化,则加上瞬态关键字来修饰,

private transient int age(); // 瞬态

RandomAccessFile:

特点:

1,只能操作文件

2,既能读,又能写。

3,维护了一个byte数组,内部定义了字节流的读取和写入

4,通过对指针的操作可以实现对文件的任意位置的读取和写入。

通过seek(int x)来达到随机访问

功能:getFilePointer seek 用于操作文件指针的方法

管道流:

特点: 读取管道和写入管道可以连续。

需要用多线程技术,单线程容易死锁

功能:connect()

//创建管道对象

PidedInputStream pis = new PidedInputStream();

PidedOutputStream pos = new PidedOutputStream();

// 将两个流连接上

pis.connect(pos);

操作基本数据类型

DataInputStream 与DataOutputStream

FileOutputStream fos = new FileOutputStream("teampfile\\data.txt");

DataOutputStream dos = new DataOutputStream(fos);

dos.writeBoolean(true); // 读 boolean b = dis.readBoolean();

dos.close();

操作字节数组

ByteArrayInputStream 与ByteArrayOutputStream

操作字符数组

CharArrayReader 与 CharArrayWriter

操作字符串

StringReader 与 StringWriter
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: