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(); } }
相关推荐
Java IO流分为两大类:字符流(Character Stream)和字节流(Byte Stream)。字符流处理单个字符,而字节流处理8位的字节序列。它们又可以进一步细分为输入流(InputStream/Reader)和输出流(OutputStream/Writer)...
### JAVA IO流概念及其应用详解 ...通过对以上知识点的学习,我们可以了解到JAVA IO流在处理文件和其他设备上的数据时的强大功能。掌握好这些基本概念和技巧,能够帮助开发者更好地处理各种数据操作需求。
在Java编程语言中,输入/输出(IO)流是一个..."IO流结构图.xlsx"文件应该能为你提供一个直观的概览,帮助你更好地理解和记忆Java IO系统。通过不断实践和学习,你将能够熟练地运用这些工具来解决各种IO相关的问题。
- **字符转换流**:InputStreamReader和OutputStreamWriter作为桥梁,用于在字节流和字符流之间进行转换,它们可以根据指定的字符集解码或编码数据。 - **字符缓冲流**:BufferedReader和BufferedWriter提供高效的...
在IT领域,IO流(Input/Output Stream)和XML解析是两个重要的概念,它们在数据处理和信息交换中起着核心作用。 IO流是Java编程语言中的一个关键特性,用于处理程序与外部设备(如硬盘、网络、内存等)之间的数据...
本文总结了Java图书管理系统(IO流版)的主要知识点,涵盖了Java基础语法、流程控制、面向对象思想、封装、继承、多态、接口、异常、集合、IO流等多方面的知识。 一、Java基础语法 * 掌握Java的基本语法,包括变量...
Java的IO流是Java编程语言中的重要组成部分,它主要用于数据的输入和输出操作。在Java中,IO流被设计为处理任何类型的数据,包括字符、字节甚至对象。本练习旨在帮助初学者理解和掌握Java IO流的基础知识。 一、IO...
Java IO库提供了丰富的类和接口来支持不同类型的流,包括字节流、字符流、对象流、缓冲流、转换流以及过滤流等。 字节流(Byte Stream)是处理原始二进制数据的流,分为输入流和输出流。InputStream和OutputStream...
处理流提供了一个中间层,它们包装了节点流,使得在读写数据前可以增加额外的处理功能,例如缓冲、字符编码转换等。常见的处理流包括BufferedReader、BufferedWriter、InputStreamReader和OutputStreamWriter等。 ...
Java IO流是Java平台核心特性之一,用于处理输入和输出数据。这个概念是Java编程中的基石,对于任何涉及数据传输或文件操作的应用程序都至关重要。《IO流宝典》这本书全面深入地探讨了这一主题,旨在帮助读者从基础...
在Java IO流中,节点流是指离数据源或程序最近的流处理流,主要有两种类型:字节流和字符流。字节流可以处理一切类型的数据,如纯文本、音频、视频等,而字符流只能处理纯文本数据。 2. 字节流: 字节流是Java IO...
2、常用21个IO流:FileWriter、FileReader、CharArrayReader、CharArrayWriter、CharSequence、OutputStreamWriter、FileOutputStream、InputStreamReader、PrintWriter、BufferedReader、InputStream、...
Io流上传图片到数据库
本文将深入探讨Java的IO流实例应用,旨在帮助开发者更好地理解和掌握这一关键概念。 IO流在Java中分为两大类:字符流(Character Stream)和字节流(Byte Stream)。字符流处理的是Unicode编码的字符,而字节流则...
本文将深入探讨`Map`集合的特性和遍历方式,以及`Set`特性的排序,并介绍如何使用`IO流`,特别是字节流和字符流。 首先,我们来了解`Map`集合的基本概念。`Map`接口是Java集合框架的一部分,它不直接继承自`...
"io流写入和读取"这个主题涵盖了如何使用IO流进行数据的存储和检索,通常涉及到文件操作、数据序列化以及与数据库的交互。在本篇文章中,我们将深入探讨这些关键知识点。 首先,IO流是Java中的一个基础概念,它允许...
标题中的“图片下载IO流代码参考”提示我们,这篇内容主要涉及的是如何使用Java的输入输出流(IO流)来实现图片的下载功能。在Java编程中,IO流是处理数据传输的核心工具,广泛应用于文件读写、网络通信等场景。在...
`IO流`允许程序读取或写入数据到各种类型的源和目标,如键盘、显示器、文件、网络连接等。本部分的io流详解内容主要涵盖以下几个方面: 1. **流的分类**: - 根据数据传输方向,流可以分为输入流(Input Stream)...
- 功能差异:节点流直接连接到数据源或目的地,如`FileInputStream`,而处理流不直接连接,它们是其他流的包装,如`BufferedInputStream`,用于提高性能。 5. 节点流与处理流的关系:节点流位于IO操作的第一线,...
字符流内部会进行字符编码和解码,因此比字节流更适合处理文本数据。BufferedReader和BufferedWriter则提供了缓冲功能,可以提高读写效率。 **文本流**的概念则是在字符流的基础上,为了方便处理文本格式的数据而...