流的操作规律,及其总结;
基本:
InputStream OutputStream:对于字节流分别进行输入输出操作
Reader Writer:对于字符流分别进行输入输出操作
转换流:
InputStreamReader:字节到字符的转换,解码
OutputStreamWriter:字符到字节的桥梁,编码
缓冲流:
BufferReader name=new BufferReader("file1.txt");
BufferWriter name=new BufferWriter("file2.txt");
想知道开发时用到那个对象,只需通过四个明确
1.明确源(来源)和目的(汇入)
源:InputStream Reader
目的:OutputStream Writer
2.明确数据是否是纯文本(字符流)数据
源: 是纯文本:Reader
否:InputStream
目的:是纯文本:Writer
否:OutputStream
3.明确具体的设备
源设备:
硬盘:用File
键盘:System.in
内存:数组
网络:socket流
目的设备:
硬盘:用File
键盘:System.out
内存:数组
网络:socket流
4.是否需要其他功能
1.是否需要高效(缓冲区)
是:添加Buffer
============================================
开发需求1:复制一个文本文件
文本文件:Reader Writer
源:硬盘
目的:硬盘
FileReader a=new FileReader("file1.text");
FileWriter b=new FileWriter("file2.text");
读写:
1 不添加缓冲区(一个一个读写,效率极低)
int dex=0;
while((dex=a.read())!=-1)
{
b.write(dex);
}
a.close();
b.close();
2 添加缓冲区(自创数组缓冲区)//a.read(char arr[]);
char arr[]=new char[1024];
int len=0;
while((len=a.read(arr))!=-1)
{
b.write(arr,0,len);
b.flush();
}
a.close();
b.close();
3 用自带的缓冲区方法Buffer
BufferReader bf1=new BufferRander(a);
BufferWriter bf2=new BufferWriter(b);
String s=null;
while((s=bf1.read())!=null)
{
bf2.write(s);
bf2.flush();
}
bf1.close();
bf2.close();
========================================
开发需求2:读取键盘录入的信息,并写入一个文件中
源:字节 InputStream 键盘
目的:硬盘 File
InputStream re=System.in;//键盘输入字节
InputStreamReader we=InputStreamReader(re);//字节转换为字符
FileWriter rw=new FileWriter("file.txt");
想高效
BufferReader bf1= new BufferReader(we);
BufferWriter bf2= new BufferWriter(rw);
读写:略
==================================
开发需求3: 将一个文本文件显示在控制台上
源:
硬盘:File
目的:
控制台:System.out
FileReader fe=new FileReader("file.txt");
OutputStreamWriter re=new OutputStreamWriter(System.out);
BufferReader= new BufferReader(fe);
BufferWriter= new BufferWriter(re);
读写:略
===================================
开发需求4: 键盘录入数据展示在控制台上
源:键盘:System.in
目的:控制台:System.out
InputStream re=System.in;
OutputStream de=System.out;
明确额外功能:需要转换因为都是字节流
但是操作文本数据,所以用字符流操作起来更方便
InputStreamReader we=InputStreamReader(re);
OutputStreamWriter re=new OutputStreamWriter(de);
读写:略
================================
开发需求5:把一个指定中文字符串以指定编码表写入到一个文件中:列如“你好”
FileReader 中是以本机默认的编码码表来操作,要以指定的编码码表得用 转换流
指定utf-8为编码表从字节流中取出file.txt,在用转换流转换成字符流
OutputStreamWriter re=new OutputStreamWriter(new FileOutputStream("file.txt"),"gbk");
re.writer("你好");
存是存进去了,取,也必须用指定码表来取
InputStreamReader ew=new `InputStreamReader(new FileInputStream("file.txt"),"gbk");
char arr[]=new char[10];
int len=ew.read(arr);
String s=new String(arr,0,len);