6.13 字符缓冲流

BufferedReader 和 BufferedWriter

      实现类中具有新方法,即声明并创建对象时不要使用多态,否则无法使用类中的新方法。
      BufferedReader新方法:String readLine(),即读一行文字。
      BufferedWriter新方法:void newLine(),即写一个换行符。

BufferedReader测试代码

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

/**
 * 测试BufferedReader
 * @author dxt
 *
 */
public class TestBufferedReader {
	public static void main(String[] args){
		//1.创建源
		File src = new File("F:/myjava/IO_Study03/abc.txt");
		//2. 选择流
		BufferedReader br = null;
		try {
			br = new BufferedReader(new FileReader(src));	//缓冲流的底层都需要节点流
			//进行读取操作
			String line = null;
			while((line = br.readLine()) != null){
				System.out.println(line);
			}
			//释放资源
			br.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e){
			e.printStackTrace();
		} finally{
			try{
				if(null != br){
					br.close();
				}
			} catch (IOException e){
				e.printStackTrace();
			}
		}
	}
}

BufferedWriter测试代码

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

/**
 * 测试BufferedWriter
 * @author dxt
 *
 */
public class TestBufferedWriter {
	public static void main(String[] args){
		//创建源
		File dest = new File("F:/myjava/IO_Study03/abc.txt");
		//选择流
		BufferedWriter bw = null;
		try {
			bw = new BufferedWriter(new FileWriter(dest, true));
			//输出操作
			String datas = "铁马冰河入梦来";
			bw.newLine();
			bw.write(datas);
			bw.flush();
		} catch (IOException e) {
			e.printStackTrace();
		} finally{
			try{
				if(null != bw){
					bw.close();
				}
			} catch (IOException e){
				e.printStackTrace();
			}
		}
	}
}

纯文本拷贝实现

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;

/**
 * 利用BufferedReader 和 BufferedWriter 对文件进行copy()
 * 仅能对纯文本进行拷贝
 * @author dxt
 *
 */
public class TestBufferedCopy {
	public static void main(String[] args){
		String src = "F:/myjava/IO_Study03/abc.txt";
		String dest = "F:/myjava/IO_Study03/abc_copy.txt";
		copy(src, dest);
	}
	/**
	 * 将源文件src中的内容拷贝到dest中
	 * @param source
	 * @param destination
	 */
	public static void copy(String source, String destination){
		//创建源
		File src = new File(source);
		File dest = new File(destination);
		//选择流
		BufferedReader br = null;
		BufferedWriter bw = null;
		
		try {
			br = new BufferedReader(new FileReader(src));
			bw = new BufferedWriter(new FileWriter(dest, true));
			//进行读取写入操作
			String flush = null;
			while((flush = br.readLine()) != null){	//读一行写一行
				bw.write(flush);
				bw.newLine();
			}
			
			//资源释放
			bw.flush();
			br.close();
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e){
			e.printStackTrace();
		} finally {
			try{
				if(null != bw){
					bw.close();
				}
			} catch(IOException e){
				e.printStackTrace();
			}
			try{
				if(null != br){
					br.close();
				}
			} catch (IOException e){
				e.printStackTrace();
			}
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,可以看出6.12和6.13是关于赫夫曼编码的编码和解码算法。下面是对这两个算法的简要介绍: 6.12 赫夫曼编码算法 赫夫曼编码是一种可变长度编码,用于将字符编码为比特串。它是一种前缀编码,即没有任何一个字符的编码是另一个字符编码的前缀。这种编码方式可以有效地压缩数据,因为出现频率高的字符可以用较短的编码表示,而出现频率低的字符可以用较长的编码表示。 赫夫曼编码算法的基本思想是:根据字符出现的频率构建一棵赫夫曼树,然后对每个字符进行编码。具体步骤如下: 1. 统计每个字符出现的频率,并将它们存储在一个频率表中。 2. 将频率表中的每个字符作为一个叶子节点,构建一棵赫夫曼树。构建赫夫曼树的方法是:将频率最小的两个节点合并成一个新节点,新节点的权值为两个节点的权值之和。重复这个过程,直到所有节点都被合并成一个根节点。 3. 对赫夫曼树进行遍历,对每个字符生成一个编码。从根节点开始,如果向左走就在编码的末尾添加一个0,如果向右走就在编码的末尾添加一个1。当遍历到一个叶子节点时,就得到了该字符的编码。 4. 将每个字符的编码存储在一个编码表中。 6.13 赫夫曼解码算法 赫夫曼解码算法的基本思想是:根据赫夫曼编码表和赫夫曼树,将比特串解码为字符。具体步骤如下: 1. 从比特串的开头开始,沿着赫夫曼树向下走,直到遇到一个叶子节点。 2. 如果遇到的是一个叶子节点,就将该节点对应的字符输出,并返回到根节点。 3. 如果遇到的是一个内部节点,就根据比特串的下一位向左或向右走,重复步骤1和步骤2,直到遇到一个叶子节点。 --相关问题--: 1. 赫夫曼编码有哪些应用场景? 2. 如何实现赫夫曼编
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值