java IO流学习笔记------(3)字节缓冲流&字符缓冲流&转换流&数据流

java IO流学习笔记------(3)字节缓冲流&字符缓冲流&转换流&数据流

字节缓冲流 —BufferedInputStream&BufferedOutputStream

方法无新增可见:文件字节流中的read(),write()方法

缓冲流能够极大提升性能
缓冲流最底层一定要有节点流
释放时只需释放最外层(全释放也可,规则:从里到外释放)

文件字节流综合练习(字节缓冲流)

package Io; 

import java.io.BufferedInputStream; 
import java.io.BufferedOutputStream; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 

/** 
* @赌徒 
*/ 
public class copyT4 { 
public static void main(String[] args) throws IOException { 
     copy("data.txt", "copy1.txt"); 

} 

public static void copy(String srcFile,String srcFile1 ) throws IOException { 
     InputStream bis=new BufferedInputStream( new FileInputStream(srcFile)); 
     OutputStream bos=new BufferedOutputStream(new FileOutputStream(srcFile1)); 

     byte b[]=new byte[1024]; 
     int len=-1; 
     while((len=bis.read(b))!=-1) { 
     bos.write(b,0,len); 
} 
     bos.flush(); 
     bos.close(); 
     bis.close(); 
} 
} 

字符缓冲流—BufferedReader&BufferedWriter

部分方法可见:文件字节流中的read(),write()方法
新增方法:
readline() 读取一行字符
newline() 写一行分隔符

文件字符流综合练习(字符缓冲流)

package Io; 

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.File;  
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 

/** 
* @author 赌徒
*/ 
public class copyT5 { 
public static void main(String[] args) throws IOException { 
     //源头
     File srcFile=new File("data.txt"); 
     File srcFile1=new File("copy2.txt"); 
     //选择流
     BufferedReader br= new BufferedReader(new FileReader(srcFile)); 
     BufferedWriter bw=new BufferedWriter(new FileWriter(srcFile1));
     String lineString=null; 
     //操作
     while((lineString=br.readLine())!=null) { 
         bw.write(lineString); 
         bw.newLine(); 
} 
     bw.flush(); 
     //释放
     bw.close(); 
     br.close(); 
} 

} 

转换流—InputStreamReader&OutputStreamWriter

 InputStreamReader(解码)/OutputStreamWriter(编码): 是字节流与字符流
之间的桥梁,能将字节流转换为字符流,并且能为字节流指定字符集,可处理一个个的字符

以字符流的形式操作字节流(纯文本)

package Io;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

/**
 *
 * 1.以字符流的形式操作字节流(纯文本)
 * 2.指定字符集
 * @author 赌徒
 *
 */
public class ConvertT6 {

	public static void main(String[] args) {
		try(BufferedReader isr=new BufferedReader( new InputStreamReader(System.in));
		BufferedWriter osw=new BufferedWriter(new OutputStreamWriter(System.out));) {
			//循环获取键盘的输入(exit退出),输出此内容
			String string="";
			while(!string.equals("exit")) {
				string=isr.readLine();//循环逐行读取
				osw.write(string);//循环写出
				osw.newLine();
				osw.flush();//强制刷新,否则内容会驻留在管道中
			}
			
		} catch (IOException e) {
			System.out.println("操作异常");
		}
	}

}
package Io;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;

/**
 * 
 * 1.以字符流的形式操作字节流(纯文本)
 * 2.指定字符集
 * @author 赌徒
 *
 */
public class ConvertText2 {

	public static void main(String[] args) {
		try(BufferedReader isr=
				new BufferedReader(
						new InputStreamReader(
								new URL("http://www.baidu.com").openStream(),"UTF-8"));) {
			       String msg;
			                    
				while ((msg=isr.readLine())!=null) {
					System.out.println(msg);
		}
	}
		catch (IOException e) {
			System.out.println("操作异常");
		}

	}
}

数据流—DataInputStream&DataOutputStream

 数据输入流允许应用程序以独立于机器的方式从基础输入流读取原始Java数据类型(方便处理基本八大数据类型和字符串,不仅保留了数据还保留了数据类型)。 应用程序使用数据输出流来写入稍后可以被数据输入流读取的数据。

构造:内部要有基础流
注意:读写的顺序要一致

数据流练习

package reIo;

import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;

/**
 * 
 * 1.写出后读取
 * 2.读取顺序与写出保持一致
 * @author 赌徒
 *
 */
public class DataT7 {

	public static void main(String[] args) throws IOException {
 
		//写出
		ByteArrayOutputStream baos=new ByteArrayOutputStream();
		DataOutputStream dos=new  DataOutputStream(new BufferedOutputStream(baos));
		//操作数据类型+数据
		dos.writeUTF("你好");
		dos.writeInt(777);
		dos.writeBoolean(true);
		dos.writeChar('a');
		dos.flush();
		byte []bytes=baos.toByteArray();
		System.out.println(bytes.length);
		//读取
		DataInputStream dis=new DataInputStream(new BufferedInputStream(new ByteArrayInputStream(bytes)));
		//顺序与写出顺序一致
		String string=dis.readUTF();
		int num=dis.read();
		boolean b=dis.readBoolean();
		char c=dis.readChar();
		System.out.println(string);
	}

}
发布了4 篇原创文章 · 获赞 12 · 访问量 2370

猜你喜欢

转载自blog.csdn.net/qq_35577787/article/details/105123530