转换流:

InputStreamReader:字节到字符的桥梁。解码

OutputStreamWriter:字符到字节的桥梁。编码

流的基本规律

1.明白源和汇

源:InputStream、Reader

汇:OutputStream、Writer

2.明白数据是否是纯文本数据

源:假设是。Reader。否,InputStream

汇:假设是,Writer,否,OutputStream

前两点明白后院,体系也就明白了

3.明白详细的设备

源设备:

硬盘:File

键盘:System.in

内存: 数组

网络:Socket流

汇设备:

硬盘:File

控制台:System.out

内存:数组

网络:Socket流

4.是否须要其它额外功能(对上述增强)

1.是否须要高效(缓冲区),

是,就加上buffer

2.是否须要转换

字节->字符:InputStreamReader:

InputStreamReader isr = new InputStreamReader(System.in);

FileWriter fe = new FileWriter("ACM.txt");

字符->字节:OutputStreamWriter:

OutputStreamWriter osw = new OutputStreamWriter(System.out)

练习:

1.复制一个文本文件:

(1)明白源和汇:源:InputStream Reader 汇:OutputStream Writer

 (2)是否是纯文本:是,源:Reader 汇:Writer

 (3)明白设备:源:File 汇:File  

FileReader fr = new FileReader(); FileWriter fw = new FileWriter();

 (4)须要高效:BufferedReader br = new BufferedReader(new FileReader("acm.txt"));

     BufferedWriter bw = new BufferedWriter(new FileWriter("ACM.txt"));

2.读取键盘信息,并写入一个文件里

 (1)明白源和汇:源:InputStream、 Reader 汇:OutputStream 、Writer

 (2)是否是纯文本:是。源:Reader 汇:Writer

 (3)明白设备:源:键盘 (System.in) 汇:硬盘 (File) 

InputStream is = System.in(); FileWriter fw = new FileWriter("ACM.txt");

(4)须要功能:1.转换,由于已明白源是Reader,这样更便捷

InputStreamReader isr = new InputStreamReader(System.in);

FileWriter fe = new FileWriter("ACM.txt");

   2.高效:BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

BufferedWriter bw = new BufferedWriter(new FileWriter("ACM.txt"))

3.将文本文件的数据显示到控制台上

(1)明白源和汇:源:InputStream、 Reader 汇:OutputStream 、Writer

(2)是否是纯文本:是。源:Reader 汇:Writer

(3)明白设备:源:硬盘(File) 汇:控制台(System.out)

FileReader fr = new FileReader("acm.txt");

OutStream out = System.ou;

(4)须要功能:

转换:FileReader fr  = new FileReader("acm.txt");

OutputStreamWriter osw = new OutputStreamWriter(System.out);

高效:BufferedReader br = new BufferedReader(new FileReader("acm.txt"))

      BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));



4.读取键盘数据,显示到控制台

(1)明白源和汇:源:InputStream、 Reader 汇:OutputStream 、Writer

(2)是否是纯文本:是。源:Reader 汇:Writer

(3)明白设备:源:键盘 (System.in) 汇:控制台(System.out)

InputSream in = System.in

OutputStream out = System.out;

(4)须要转换,都是字节流。操作文本数据,使用字符流操作,更方便。一次读取一行

InputStreamReader isr = new InputStreamReader(System.in);

OutputStreamWriter osw = new OutputStreamWriter(System.out);

高效:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.ou))

5.转换流的编码解码

将中文字符串数据依照指定的编码表写到文本文件里



(1).明白源和汇:汇:OutputStream 、Writer

(2)是否是纯文本:是,汇:Writer

(3)明白设备: 汇:硬盘 (File) 

FilrWriter fw = new FileWriter("acm.txt");此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可接受的

fw.write("你好");//中文占两个字节

OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("x.txt"),"GBK");

FileWriter fw = new FileWriter("gbk.txt");

这两句代码的功能是等同的。

FileWriter:事实上就是转换流指定了本机默认码表的体现,并且这个转换流的子类对象,能够方便操作文本文件,简单说,操作文件的字节流+本机默认的编码表

假设操作文本文件须要详细的编码表,就必须使用转换流

(4)须要高效

BufferedWriter bw = new BufferedWriter(osw);

import java.io.*;

public class Main
{
public static void main(String[] args) throws IOException { //Demo_1();
Demo_2();
Demo_3();
} public static void Demo_3() throws IOException {
// TODO Auto-generated method stub
//FileReader fr = new FileReader("gbk.txt");
InputStreamReader isr = new InputStreamReader(new FileInputStream("gbk.txt"),"GBK"); char[] by = new char[20];
//int len = fr.read(by);
int len = isr.read(by);
String str = new String(by,0,len);
System.out.println(str);
// fr.close();
isr.close();
} public static void Demo_2() throws IOException {
//OutputStreamWriter(OutputStream out, String charsetName) ,创建使用指定编码表。
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("gbk.txt"),"GBK");//
BufferedWriter bw = new BufferedWriter(osw);
bw.write("你好");
bw.close();
} public static void Demo() throws IOException{
FileWriter fw = new FileWriter("gbk.txt");
fw.write("你好");
fw.close();
}
}

注意既然需求中已经指定编码表的动作,那就不能够使用FileWriter。由于FileWriter内部使用的是默认的本地码表,仅仅能使用其父类。OuptStreamWriter,而OutputStreamWriter接收一个字节输出的对象,并且是文件操作,那么对象就应该是FileOuputStream

OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("x.txt"),"GBK");



转换流什么时候用?



1.源或汇相应的设备是字节流,可是操作的是文本数据,能够是用转换做桥梁,提高文本操作的便捷

2.一旦操作文本涉及到详细的指定的编码表时,必须使用转换流



JAVA学习第五十一课 — IO流(五)流的操作基本规律的更多相关文章

  1. JAVA学习第四十七课 — IO流(一):文件的读写

    输入流和输出流相对于内存 将外部设备的数据读取到内存中:输入 将内存中的数据写入外部设备中:输出 IO流经常使用基类 字节流的抽象基类:InputStream,OutputStream 字符的抽象基类 ...

  2. Java学习之路(十一):IO流<前戏>

    File类的概述和构造方法 构造方法: File(String pathname):根据一个路径得到File对象 File(String parent,String child):根据一个目录和一个子 ...

  3. java基础(二十一)IO流(四)

    这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...

  4. 【java学习笔记】文件读写(IO流)

    1.字节流 FileInputStream.FileOutputStream ①FileInputStream import java.io.FileInputStream; public class ...

  5. 【Java学习笔记之三十一】详解Java8 lambda表达式

    Java 8 发布日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Java 8之前 ...

  6. JAVA学习第五十七课 — IO流(十一)

    一.管道流 PipedInputStream 和 PipedOutPutStream 输入和输出能够直接进行连接.结合线程使用 管道流,顾名思义,写一个读一个.连成一个管子 API文档:管道输入流应该 ...

  7. java学习第21天(IO流的使用)

    IO流分类: A:流向 输入流 读取数据 输出流 写出数据 B:数据类型 字节流 字节输入流 字节输出流 字符流 字符输入流 字符输出流 注意: a:如果我们没有明确说明按照什么分,默认按照数据类型分 ...

  8. 【Python】Java程序员学习Python(十一)— IO

    一.前言 io的内容其实还是有很多的,现在我也只是了解初步用法,当然详细内容还是应该参照官方api的: 官方api:https://docs.python.org/3/library/os.html. ...

  9. java学习第20天(IO流)

    构造方法File file = new File("e:\\demo"); 创建文件夹 File file = new File("e:\\demo"); fi ...

随机推荐

  1. Windows 10 MBR转GPT分区

    注意:分区有风险,操作需谨慎,提前备份好数据. 说明: 1.有“系统保留”的分区,可以直接删除,用来做GPT分区的UEFI启动分区. 2.没有“系统保留”分区的,需要在分区最前面调整分区大小,留出30 ...

  2. android监听虚拟按键的显示与隐藏【转】

    本文转载自:http://blog.csdn.net/u014583590/article/details/55263141 虚拟按键在华为手机中大量存在,而虚拟按键的存在无疑增加了屏幕适配的难度,往 ...

  3. php建立简单的用户留言系统

    php建立简单的用户留言系统 样例 addMsg.php--添加留言页面 doAction.php--响应添加留言页面 . viewMsg.php--显示留言页面 目录结构 addMsg.php--添 ...

  4. java环境的配置和求最大子数组

    做java开发的朋友,都应该有一个适合自己的开发环境,而eclipse就是这么一个适合java开发的集成环境,完全免费,是java开发人员的必备平台.在安装eclipse之前需要安装JDK, JDK是 ...

  5. BZOJ 1196 二分+Kruskal

    思路: 二分答案 判一下能不能加 //By SirisuRen #include <cstdio> #include <cstring> #include <algori ...

  6. 在windows系统下虚拟机和ubuntu系统的安装和卸载

    一.安装 之前有装过双系统,但是吧,一直用ubuntu系统,很久没进windows之后的某一天,自己再进windows,发现windows系统崩了,我也不知道为什么,找了很多方法没有解决,最后只好重装 ...

  7. 推荐10个超棒的jQuery工具 提示插件

    脚本之家 http://www.jb51.net/article/28525.htm

  8. 【从零开始】【Java】【2】项目最开始都有什么鬼

    闲聊 刨其根知其底. 让我们从一开始就慢嚼细咽. 开始 先来看下项目都有什么: 项目结构图 pom文件图 项目结构 项目=核心代码+依赖管理文件+说明文件+IDE配套文件+外部依赖包: 核心代码:sr ...

  9. Validate US Telephone Numbers FreeCodeCamp

    function telephoneCheck(str) { // 祝你好运 //var re = /^1? ?(\(\d{3}\)|\d{3})[ |-]?\d{3}[ |-]?\d{4}$/; / ...

  10. Java常用工具类---XML工具类、数据验证工具类

    package com.jarvis.base.util; import java.io.File;import java.io.FileWriter;import java.io.IOExcepti ...