Java IO之处理流(缓冲流、转换流)

一、处理流:

增强功能,提供性能,在节点流之上。

二、节点流与处理流的关系

节点流(字节流、字符流)处于IO操作的第一线,所有操作必须通过它们进行; 处理流可以对其他流进行处理(提高效率或操作灵活性)。

三、缓冲流1、字节缓冲流BufferedInputStreamBufferedOutputStreampackage IOBuffer;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;/** * 处理流(字节缓冲流) * 字节流文件拷贝+缓冲流,提高性能 * 缓冲流(节点流) */@SuppressWarnings(“all”){(String[] args) {String srcPath = “G:/1314.jpg”;String destPath = “G:/try/520.jpg”;try {copyFile(srcPath,destPath);} catch (IOException e) {e.printStackTrace();}}(String srcPath,String destPath) throws IOException{//1、建立联系 源存在(且为文件)+目的地(文件可以不存在)File src = new File(srcPath);File dest = new File(destPath);if(!src.isFile()){System.out.println(“只能拷贝文件”);throw new IOException(“只能拷贝文件”);}//2、选择流 缓冲流(字节输入流)InputStream is = new BufferedInputStream(new FileInputStream(src));OutputStream os =new BufferedOutputStream(new FileOutputStream(dest)) ;[1024];int len = 0;while(-1!=(len = is.read(flush))){//写出os.write(flush,0,len);}os.flush();//强制刷出//关闭流 先打开后关闭os.close();is.close();}}2、字符缓冲流BufferedReader 新增readLine()读取一个文本行。 BufferedWriter 新增newLine()写入一个行分隔符。package IOBuffer;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;/** * * 字符缓冲流+新增方法(不能发生多态) */{(String[] args) {String srcPath = “G:/oo.txt”;String destPath = “G:/xx.txt”;//创建源File src = new File(srcPath);File dest = new File(destPath);//选择流 缓冲流 如果后面要使用新增方法,就不能使用多态了。//如果没有使用子类的新增方法,,可以使用多态方式。/*Reader reader = null;Writer writer = null;reader =new BufferedReader(new FileReader(src)) ;writer = new BufferedWriter(new FileWriter(dest));reader.read(flush)writer.write(flush,0,len)*/BufferedReader reader = null;BufferedWriter writer = null;try {reader =new BufferedReader(new FileReader(src)) ;writer = new BufferedWriter(new FileWriter(dest));//读取操作//新增方法操作的字符缓冲流String line = null;//一行一行读取 BufferedReader新增readLine()while(null!=(line = reader.readLine())){writer.write(line);//writer.append(“\r\n”);//换行符writer.newLine();//换行符 新增方法}writer.flush();} catch (FileNotFoundException e) {e.printStackTrace();System.out.println(“文件不存在”);} catch (IOException e) {e.printStackTrace();}finally{if(null!=reader){try {writer.close();reader.close();} catch (IOException e) {e.printStackTrace();}}}}}四、转换流

(一)字节流转换为字符流,处理乱码(编码集、解码集) 解码:二进制–>解码字符集–>字符 编码:字符–>编码字符集–>二进制

(二)为什么会出现乱码? 1、解码与编码的字符集不统一 2、字节缺少,长度丢失

(三)文件乱码(通过转换流进行处理)

package IOConver;import java.io.UnsupportedEncodingException;public class Demo01 {(String[] args) {test01();System.out.println(“———–“);test02();}(){//解码byte–>charString str = [] data = str.getBytes();//编码与解码的字符集统一System.out.println(new String(data));try {data = str.getBytes(“gbk”);//设定编码字符集 编码//不统一字符集,出现乱码System.out.println(new String(data));//解码} catch (UnsupportedEncodingException e) {e.printStackTrace();}byte[] data2;try {//编码data2 = “中国”.getBytes(“GBK”);//解码str = new String(data2,”GBK”);//str = new String(data2);//不指定 默认解码UTF-8 会出现乱码System.out.println(new String(str));} catch (UnsupportedEncodingException e) {e.printStackTrace();}}(){String str = “中国”;byte[] data;data = str.getBytes();//编码//字节数不完整System.out.println(new String(data,0,4));}}而消极的人则在每个机会都看到某种忧患。

Java IO之处理流(缓冲流、转换流)

相关文章:

你感兴趣的文章:

标签云: