`

IO流 包装流和编码解码流程图

 
阅读更多

0 编码解码的顺序和如何甄别:

 



 

 

 

 

1 总结大纲:

 

处理流:增强功能、提供性能,节点流之上
一、缓冲流
1)、字节缓冲流
BufferedInputStream
	InputStream is =new BufferedInputStream(new FileInputStream(src));
BufferedOutputStream
	OutputStream os =new BufferedOutputStream( new FileOutputStream(dest));
2)、字符缓冲流
BufferedReader   readLine() 
	BufferedReader reader =new BufferedReader(new FileReader(new File(src)));
BufferedWriter    newLine() 
	BufferedWriter wr =new BufferedWriter(new FileWriter(new File(dest)));

二、转换流: 字节流 转为字符流   处理乱码(编码集、解码集)
1、编码与解码概念  以程序为中心
 编码:  字符   ---编码字符集>二进制
 解码 : 二进制   --解码字符集->      字符

 数字 ----- >字符   (解码 以人为主体,解释给人看得懂)
 字符 ----->  数字 (编码,人为主题,把人类世界符号编程到计算机世界中)
2、乱码:
1)编码与解码的字符集不统一
2)字节缺少,长度丢失
3、文件乱码 
InputStreamReader(字节输入流,"解码集")
OutputStreamWriter(字符输出流,"编码集")

 

 

2 代码:

 

2.1 字节包装流实现拷贝:

/**
 * 字节流文件拷贝+缓冲流 ,提高性能
 * 缓冲流(节点流)
 * @author Administrator
 *
 */
public class BufferedByteDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
	}
	/**
	 * 文件的拷贝
	 * @param  源文件路径
	 * @param  目录文件路径
	 * @throws FileNotFoundException,IOException
	 * @return 
	 */
		public static void copyFile(String srcPath,String destPath) throws FileNotFoundException,IOException {
			//1、建立联系 源(存在且为文件) +目的地(文件可以不存在)  
			File src =new File(srcPath);
			File dest =new File(destPath);
			if(! src.isFile()){ //不是文件或者为null
				System.out.println("只能拷贝文件");
				throw new IOException("只能拷贝文件");
			}
			//2、选择流
			InputStream is =new BufferedInputStream(new FileInputStream(src));
			OutputStream os =new BufferedOutputStream( new FileOutputStream(dest));
			//3、文件拷贝   循环+读取+写出
			byte[] flush =new byte[1024];
			int len =0;
			//读取
			while(-1!=(len=is.read(flush))){
				//写出
				os.write(flush, 0, len);
			}
			os.flush(); //强制刷出
			
			//关闭流
			os.close();
			is.close();
		}

}

 

 

2.2 字符包装流实现拷贝:

 

/**
 * 字符缓冲流 +新增方法(不能发生多态) 
 * @author Administrator
 *
 */
public class BufferedCharDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//创建源 仅限于 字符的纯文本
		File src =new File("E:/xp/test/Demo03.java");
		File dest =new File("e:/xp/test/char.txt");
		//选择流
		BufferedReader reader =null;		
		BufferedWriter wr =null;
		try {
			reader =new BufferedReader(new FileReader(src));
			wr =new BufferedWriter(new FileWriter(dest));
			//读取操作
			/*
			char[] flush =new char[1024];
			int len =0;
			while(-1!=(len=reader.read(flush))){
				wr.write(flush, 0, len);
			}*/
			//新增方法的操作
			String line =null;
			while(null!=(line=reader.readLine())){
				wr.write(line);
			//wr.append("\r\n");
				wr.newLine(); //换行符号
			}
			wr.flush();//强制刷出
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			System.out.println("源文件不存在");
		} catch (IOException e) {
			e.printStackTrace();
			System.out.println("文件读取失败");
		}finally{
			try {
				if (null != wr) {
					wr.close();
				}
			} catch (Exception e2) {
			}
			try {
				if (null != reader) {
					reader.close();
				}
			} catch (Exception e2) {
			}
		}
	}

}

 

 

2.3  包装流的终极文件拷贝,(此写法只能拷贝文本文件,对于图片 声音 视频等不适用 ) ,注意体会代码的注释

 

体会 File类被一层层包裹的目的,  以及类   InputStreamReader  BufferedWriter  BufferedReader的遍历方法

readLine  writeLine的使用

 

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

/**
 * 转换流: 字节转为字符
 * 1、输出流 OutputStreamWriter 编码 (把人看得懂的字符写到计算机中  给这些字符编数字  编码)
 * 2、输入流 InputStreamReader  解码(存储在计算中中的文件是二进制的,要把二进制的数字变成人类读的懂的字符 解释给人看 解码)
 * 
 * 确保源不能为乱码
 * @author Administrator
 *
 */
public class ConverDemo02 {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		//指定解码字符集
		BufferedReader br =new BufferedReader( // 只有这个类才能字符、数组和行的高效读取
				new InputStreamReader( // InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符, 是FileReader的父类,也只有InputStreamReader 才能指定字符集,InputStream-->Reader = InputStreamReader 
					new BufferedInputStream(
							new FileInputStream(  
									new File("E:/xp/test/Demo03.java"))),"UTF-8")    -- 从       BufferedInputStream( FileInputStream(file) )  
				);
		//写出文件 编码
		BufferedWriter bw =new BufferedWriter(
				new OutputStreamWriter(
					new BufferedOutputStream(	
					new FileOutputStream(new File("E:/xp/test/encode.java")))));
				
		String info =null;
		while(null!=(info=br.readLine())){
			//System.out.println(info);
			bw.write(info);
			bw.newLine();
		}
		bw.flush();
		bw.close();
		br.close();
	}

}

 

 

 

 

  • 大小: 15.2 KB
分享到:
评论

相关推荐

    IO流 javaio java 流

    Java IO流分为两大类:字符流(Character Stream)和字节流(Byte Stream)。字符流处理单个字符,而字节流处理8位的字节序列。它们又可以进一步细分为输入流(InputStream/Reader)和输出流(OutputStream/Writer)...

    IO流pdf宝典

    ### JAVA IO流概念及其应用详解 ...通过对以上知识点的学习,我们可以了解到JAVA IO流在处理文件和其他设备上的数据时的强大功能。掌握好这些基本概念和技巧,能够帮助开发者更好地处理各种数据操作需求。

    IO流结构图_io_java_思维导图_

    在Java编程语言中,输入/输出(IO)流是一个..."IO流结构图.xlsx"文件应该能为你提供一个直观的概览,帮助你更好地理解和记忆Java IO系统。通过不断实践和学习,你将能够熟练地运用这些工具来解决各种IO相关的问题。

    IO流的主要流

    - **字符转换流**:InputStreamReader和OutputStreamWriter作为桥梁,用于在字节流和字符流之间进行转换,它们可以根据指定的字符集解码或编码数据。 - **字符缓冲流**:BufferedReader和BufferedWriter提供高效的...

    IO流、Xml解析

    在IT领域,IO流(Input/Output Stream)和XML解析是两个重要的概念,它们在数据处理和信息交换中起着核心作用。 IO流是Java编程语言中的一个关键特性,用于处理程序与外部设备(如硬盘、网络、内存等)之间的数据...

    Java图书管理系统(IO流版)(csdn)————程序.pdf

    本文总结了Java图书管理系统(IO流版)的主要知识点,涵盖了Java基础语法、流程控制、面向对象思想、封装、继承、多态、接口、异常、集合、IO流等多方面的知识。 一、Java基础语法 * 掌握Java的基本语法,包括变量...

    Java-Io流,练习

    Java的IO流是Java编程语言中的重要组成部分,它主要用于数据的输入和输出操作。在Java中,IO流被设计为处理任何类型的数据,包括字符、字节甚至对象。本练习旨在帮助初学者理解和掌握Java IO流的基础知识。 一、IO...

    java io流 案例

    Java IO库提供了丰富的类和接口来支持不同类型的流,包括字节流、字符流、对象流、缓冲流、转换流以及过滤流等。 字节流(Byte Stream)是处理原始二进制数据的流,分为输入流和输出流。InputStream和OutputStream...

    Java基础篇:IO流.pdf

    处理流提供了一个中间层,它们包装了节点流,使得在读写数据前可以增加额外的处理功能,例如缓冲、字符编码转换等。常见的处理流包括BufferedReader、BufferedWriter、InputStreamReader和OutputStreamWriter等。 ...

    IO流宝典.pdf

    Java IO流是Java平台核心特性之一,用于处理输入和输出数据。这个概念是Java编程中的基石,对于任何涉及数据传输或文件操作的应用程序都至关重要。《IO流宝典》这本书全面深入地探讨了这一主题,旨在帮助读者从基础...

    Java IO流 总结

    在Java IO流中,节点流是指离数据源或程序最近的流处理流,主要有两种类型:字节流和字符流。字节流可以处理一切类型的数据,如纯文本、音频、视频等,而字符流只能处理纯文本数据。 2. 字节流: 字节流是Java IO...

    JAVA IO流缓冲字节流缓冲字符流等流经典代码示例加注释总结.rar

    2、常用21个IO流:FileWriter、FileReader、CharArrayReader、CharArrayWriter、CharSequence、OutputStreamWriter、FileOutputStream、InputStreamReader、PrintWriter、BufferedReader、InputStream、...

    Io流上传图片到数据库

    Io流上传图片到数据库

    java之io流实例

    本文将深入探讨Java的IO流实例应用,旨在帮助开发者更好地理解和掌握这一关键概念。 IO流在Java中分为两大类:字符流(Character Stream)和字节流(Byte Stream)。字符流处理的是Unicode编码的字符,而字节流则...

    map集合以及IO流

    本文将深入探讨`Map`集合的特性和遍历方式,以及`Set`特性的排序,并介绍如何使用`IO流`,特别是字节流和字符流。 首先,我们来了解`Map`集合的基本概念。`Map`接口是Java集合框架的一部分,它不直接继承自`...

    io流写入和读取

    "io流写入和读取"这个主题涵盖了如何使用IO流进行数据的存储和检索,通常涉及到文件操作、数据序列化以及与数据库的交互。在本篇文章中,我们将深入探讨这些关键知识点。 首先,IO流是Java中的一个基础概念,它允许...

    图片下载IO流代码参考

    标题中的“图片下载IO流代码参考”提示我们,这篇内容主要涉及的是如何使用Java的输入输出流(IO流)来实现图片的下载功能。在Java编程中,IO流是处理数据传输的核心工具,广泛应用于文件读写、网络通信等场景。在...

    io流详解代码

    `IO流`允许程序读取或写入数据到各种类型的源和目标,如键盘、显示器、文件、网络连接等。本部分的io流详解内容主要涵盖以下几个方面: 1. **流的分类**: - 根据数据传输方向,流可以分为输入流(Input Stream)...

    JAVA IO流技术

    - 功能差异:节点流直接连接到数据源或目的地,如`FileInputStream`,而处理流不直接连接,它们是其他流的包装,如`BufferedInputStream`,用于提高性能。 5. 节点流与处理流的关系:节点流位于IO操作的第一线,...

    IO流学习(字节流 字符流 文本流)!

    字符流内部会进行字符编码和解码,因此比字节流更适合处理文本数据。BufferedReader和BufferedWriter则提供了缓冲功能,可以提高读写效率。 **文本流**的概念则是在字符流的基础上,为了方便处理文本格式的数据而...

Global site tag (gtag.js) - Google Analytics