《缓冲流》
缓冲流要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,同时增加了一些新的方法
缓冲输入流支持其父类的mark和reset方法
BufferedReader提供了readLine方法用于读取一行字符串(以\r,\n分隔)
bufferedWriter提供了newLine用于写入一个行分隔符
对于输出的缓冲流,写出的数据会先在内存中缓存,使用flush方法会将内存中的数据立刻写出
import java.io.*;
public class TestBufferSteam1 {
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("d:/HelloWorld.java");
BufferedInputStream bis = new BufferedInputStream(fis);
int c=0;
System.out.println((char)bis.read());
System.out.println((char)bis.read());
bis.mark(10);
for(int i=0;i<=10 && (c=bis.read())!=-1;i++){
System.out.print((char)c+" ");
}
System.out.println();
bis.reset(); //又回到mark的地方
for(int i=0;i<=10 && (c=bis.read())!=-1;i++){
System.out.print((char)c+" ");
}
bis.close();
}catch( IOException e) {
e.printStackTrace();
}
}
}
--------imooc---------
FileOutputStream--->write()方法相当于一滴一滴把水转移过去
DataOutputStream----->writeXxx()方法会方便一些,相当于一瓢一瓢把水转移过去
BufferedOutputStream----->write方法更方便,相当于一瓢一瓢先放入桶中,再从桶中导入另一个缸中,性能提高了
import java.io.*;
public class BufferDemo {
public static void main(String args[]) throws IOException {
BufferDemo bd = new BufferDemo();
bd.copyFileByBuffer(new File("D:\\HW.java"),new File("D:\\HW.txt"));
}
public void copyFileByBuffer(File srcFile,File destFile) throws IOException{
if(!srcFile.exists()){
throw new IllegalAccessError("文件不存在");
}
if(!srcFile.isFile()){
throw new IllegalAccessError("不是文件");
}
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));
int c;
while((c = bis.read())!=-1){
bos.write(c);
bos.flush();//刷新缓冲区
}
bis.close();
bos.close();
}
}
《字符流的补充mooc》
1)编码问题
2)认识文本和文本文件
Java的文本(char)是16为无符号整数,是字符的Unicode编码(双字节)
文件是 byte byte。。。的数据序列
文本文件是文本(char)序列按照编码方案(utf-8,utf-16be,gbk)序列化为byte的存储结构
3)字符流(Reader Writer)
字符的处理,一次处理一个字符
字符的底层任然是基本的字节序列
字符流的基本实现
InputStreamReader 完成byte流解析为char流,按照编码解析
OutputStreamWriter 提供char流到byte流,按照编码处理
FileReader/FileWriter
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FrAndFwDemo {
public static void main(String[] args) throws IOException{
FileReader fr = new FileReader("d:\\HW.java");
FileWriter fw = new FileWriter("d:\\HW.txt",true);
char[] buffer = new char[2056];
int c;
while((c = fr.read(buffer,0,buffer.length))!=-1){
fw.write(buffer,0,c);
fw.flush();
}
fr.close();
fw.close();
}
}
字符流的过滤器
BufferedReader ---->readline 一次读一行
BufferedWriter ---->一次写一行。
《对象序列化,反序列化??》
1)对象序列化,就是将object转换成byte序列,反之叫对象反序列化
2)序列化流(ObjectOutputStream),是过滤流-----writeObj
反序列化流(ObjectInputStream)-----readObject
3) 序列化接口(Serializable)
对象必须实现序列化接口,才能进行序列化,否则出现异常
这个接口,没有任何方法,只是一个接口
transient; //该元素不会进行jvm默认的序列化