IO总结

来源:互联网 发布:淘宝代购点什么意思 编辑:程序博客网 时间:2024/06/05 20:24
java.lang.Object
  java.io.OutputStream
      java.io.FilterOutputStream
          java.io.BufferedOutputStream


一、java中IO流的分类:
按流向分为:输入流-----读数据
输出流-----写数据
按数据类型分为:
字节流
字节输入流----读数据
字节输出流----写数据
字符流
字符输入流----读数据
字符输出流----写数据
一般情况下:如果没有明确告诉使用什么流:----默认使用字节流:按照数据类型去分
一般情况下,文本文档使用字符缓冲流读写数据,视频、图片使用字节缓冲流读写。
二、
1.1 字节输入(输出)流的操作步骤:
1)创建文本字节输入(输出)流对象
2)给文本读(写)数据
3)关闭流,释放资源
1.2 字节输入输出流的读写数据的方法:FileOutputStream /FileInputStream
public FileOutputStream(String name):
FileOutputStream fos=new FileOutputStream("a.txt")
public FileInputStream(String name):
FileInputStream fis=new FileInputStream("a.txt")
1)按一次一个字节读取:public int read()
int by=0;
while((by=fis.read())!=-1){
System.out.println((char)by);
}
2)按一次一个字节数组读取:public int read(byte[] b)
byte[] bys=new byte[1024];
int len=0;
while((len=fis.read(bys))!=-1){
System.out.println(new String(bys,0,len));
}
2.1 字节缓冲流:
BufferedOutputStream:字节缓冲输出流------写数据
BufferedInputStream:字节缓冲输入流--------读数据

2.2 字节缓冲流的读写方法:
public BufferedOutputStream(FileOutputStream out)
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("a.txt"));
public BufferedInputStream(FileInputStream in)
BufferedInputStream  bis=new BufferedInputStream(new FileInputStream("a.txt"));
1)按一次一个字节读取:public int read()
int by=0;
while((by=bis.read())!=-1){
System.out.println((char)by);
}
2)按一次一个字节数组读取:public int read(byte[] b)
byte[] bys=new byte[1024];
int len=0;
while((len=bis.read(bys))!=-1){
System.out.println(new String(bys,0,len));
}

一般建议使用字节缓冲流的字节数组形式可以高效的读写数据。


三、 
java.lang.Object
java.io.Writer
java.io.OutputStreamWriter
java.io.FileWriter
数据源:
a.txt ----读数据---字符转换流---InputStreamReader----FileReader----BufferedReader
目的地
b.txt ----写数据---字符转换流---OutputStreamWriter---FileWriter----BufferedWriter

字符输出流写数据的几种方法:
public void write(int c):写入单个字符
      public void write(char[] cbuf):写一个字符数组
读取数据的方法:
       public int read():一次读取要给字符
字符输入输出流特有的功能:public abstract void flush():刷新流的缓冲


3.1 字符输入输出流:
字符流(转换流) = 字节流+ 编码格式
public OutputStreamWriter(OutputStream out,String charsetName):使用指定的字符集将字节流转换为字符流
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("a.txt"),"GBK");
public InputStreamReader(InputStream in, String charsetName):使用指定的字符集将字节输入流转转为字符输入流
InputStreamReader isr=new InputStreamReader(new FileInputStream("a.txt"),"GBK");
字符流的读写方法:
  1)按一次一个字节读取:public int read()
int by=0;
while((by=isr.read())!=-1){
System.out.println((char)by);
}
2)按一次一个字节数组读取:public int read(byte[] b)
char[] bys=new char[1024];
int len=0;
while((len=isr.read(bys))!=-1){
System.out.println(new String(bys,0,len));
osw.flush();
}

3.2 由于使用转换字符流他的名字很长,并且每个流对象使用的是默认的字符集
OutputStreamWriter = OutputStream("文件名称路径") + 编码格式(默认编码格式)
InputStreamReader = InputStream("文件名称路径") + 编码格式(默认的编码格式);

java就提供了他们对应的子类进行实现:
public FileReader(String fileName):字符输入流
FileReader fr=new FileReader("a.txt");
public FileWriter(String fileName):字符输出流
FileWriter fw=new FileWriter("a.txt");
字符流的读写方法:
  1)按一次一个字节读取:public int read()
int by=0;
while((by=fr.read())!=-1){
System.out.println((char)by);
}
2)按一次一个字节数组读取:public int read(byte[] b)
char[] bys=new char[1024];
int len=0;
while((len=fr.read(bys))!=-1){
System.out.println(new String(bys,0,len));
fw.flush();
}

3.3 字符缓冲输入输出流:
BufferedReader br=new BufferedReader(new FileReader("a.txt"))
BufferedWriter bw=new BufferedWriter(new FileWriter("a.txt"))
字符缓冲流的特殊方法:
BufferedWriter中的特殊方法
public void newLine():由系统写入:行的分隔符 
BufferedReader中的特殊方法:
public String readLine():一次读取一个本行(返回string类型)

字符缓冲流的读写方法:
String line = null ;
while((line = br.readLine()) != null){
System.out.println(line);
bw.write(line);
bw.newLine();
bw.flush();
}

建议一般使用字符缓冲流的形式可以高效的读写数据。
1 0
原创粉丝点击