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
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
相关文章推荐
- 【UVA】【10328】
- BZOJ 1087: [SCOI2005]互不侵犯King( 状压dp )
- 黑马程序员-学习日记(反射)
- 【C++】深度探索C++对象模型读书笔记--关于对象(Object Lessons)
- 程序语言理解
- SpringMVC 4.1.6 @RestController实例入门
- UVALive 6832 Bit String Reordering
- 编程与创造
- css实现table锁定表头
- linux下压缩工具总结与使用(参考私房菜)
- Android中ImageButton边框完全填充
- 字符串移位包含问题
- HDU 2476 String painter (区间DP)
- UVALive 6959 签到(水题)
- iOS之NSAttributedString-------字符属性
- 黑马程序员—IO(二)File类、Properties类、打印流、序列流(合并流)
- log4j对象改变日志级别
- 黑马程序员——基础学习(九)String的实际案例及StringBuffer/StringBuilder
- 黑马程序员—IO(一)流概述、字符流、字节流、流操作规律
- 黑马程序员-学习日记(多线程安全问题和死锁认识)