文档章节

IO流操作规律 转码

cuncaojin
 cuncaojin
发布于 2015/01/24 18:50
字数 951
阅读 24
收藏 1
/*
  
  IO流操作基本规律:
  
  1、明确源和目的
   源:输入流。InputStream Reader
   目的:输出流。OutputStream Writer
   
  2、操作的数据是否是纯文本?
   是:字符流
   不是:字节流。
   
  3、当体系明确后,再明确要使用哪个具体的对象。
   通过设备来进行区分:
   源设备:内存、硬盘、键盘
   目的设备:内存、硬盘、控制台
 
 
  
  /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
 /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
 
 
 
 例1、将一个文本文件中的数据存储到另一个文件中,复制文件。
 
 分析:
 -----------------------------------------------
 源:以为是源,所以使用读取流。InputStream Reader
 是不是操作文本文件?
 是,这时就选择Reader
 这样体系就明确了。
 -----------------------------------------------
 接下来,明确要使用该类体系的哪个对象。
 明确设备:硬盘 上的一个文件。
 Reader 体系中可以操作文件的对象时FileReader
 // FileReader fr = new FileReader("a.txt");
 
 是否需要提高效率呢?
 是。加入Reader体统中的缓冲区 BufferedReader
 //BufferedReader bufr = new BufferedReader(fr);
  
 ===============================================
 
 目的:OutputStream 一个文件
 是否是纯文本?
 是。Writer
 设备:硬盘 一个文件
 Writer体系中可以操作问价的对象FileWriter
 // FileWriter fw = new FileWriter("b.txt");
  
 是否需要提高效率?
 是。加入Writer体系的缓冲区 BufferedWriter
 //BufferedWriter bufw = new BufferedWriter(fw);
  
 
*/ 
//标准录入输出
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
//文本文件到文件(复制)
//!!!注意:
//将字节流转为字符流的目的:方便操作,可以调用BufferedReader的readLine()方法整行读取。
BufferedWriter分行可调用newLine()方法。而非添加"\r\n"这个不跨平台!
BufferedReader bufr = new BufferedReader(new InputStreamReader(new FileInputStream("D:\\Demo.txt"),"UTF-8"));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("D:"+File.sepatator+"b.txt"),"GBK"));
转换流:
InputStreamReader、OutStreamReader,在涉及到编码时,必须使用!

  ------------------------------------------------------ --------------------------------------------------------

类 InputStreamReader

java.lang.Object
  java.io.Reader
      java.io.InputStreamReader
  • public class InputStreamReader extends
InputStreamReader(InputStream in)
          创建一个使用默认字符集的 InputStreamReader。
InputStreamReader(InputStream in, Charset cs)
          创建使用给定字符集的 InputStreamReader。
InputStreamReader(InputStream in, CharsetDecoder dec)
          创建使用给定字符集解码器的 InputStreamReader。
InputStreamReader(InputStream in, String charsetName)
          创建使用指定字符集的 InputStreamReader。

 ------------------------------------------------------- -------------------------------------------------------

类 OutputStreamWriter

java.lang.Object
  java.io.Writer
      java.io.OutputStreamWriter
  • public class OutputStreamWriter extends
构造方法摘要
OutputStreamWriter(OutputStream out)
          创建使用默认字符编码的 OutputStreamWriter。
OutputStreamWriter(OutputStream out, Charset cs)
          创建使用给定字符集的 OutputStreamWriter。
OutputStreamWriter(OutputStream out, CharsetEncoder enc)
          创建使用给定字符集编码器的 OutputStreamWriter。
OutputStreamWriter(OutputStream out, String charsetName)
          创建使用指定字符集的 OutputStreamWriter。

 


 个人总结:

    1、java.IO包中的类 四个顶级抽象类:Reader    Writer    InputStream    OutputStream

        它们的子类都是由两个"单词"组成,第一个"单词"是功能,第二个"单词"表示所属的类

    2、字符流:专门用来处理文本。

         字节流:通吃。文本需要编码解码时必须使用!

    3、高效的Buffered

        BufferedReader、BufferedWriter 、BufferedInputStream、BufferedOutputStream ,专门用来提高效率,作为装饰类,用来处理相应的流对象,使其功能增强。Buffered修饰的流类具有的readLine()方法,就是提高了原有流对象read()读取单个字符的效率。

    注意:readLine()返回的是String类型,读完时返回 null;

                而int read()读取的是字符或字节,返回的是读到的字符或字节的int类型的值;

                而int read(参数)参数是字符数组或字节数组,将读到的字符或字节(从offf下标开始存入,长度为len的)数组,返回实际存入的字符数。

     4、转码——字符流和字节流之间的桥梁

    InputStreamReader —— 从字节流到字符流 

    OutputStreamWriter —— 从字符流到字节流


    字节流中的数据都是字符时,转成字符流操作更高效。


    5、个人发现:

        读:    字符流    <-----------     字节流 

        写:    字符流    ----------->     字节流 

 

 

 

本文转载自:czbk

cuncaojin
粉丝 1
博文 45
码字总数 2950
作品 0
郑州
私信 提问
IO流 流的到底是什么?

在下初学Java到现在也有1年了,刚开始学只知道io流很重要,io流的各种操作方法,io流可以通过网络传输数据,学啊学,学会了io流的操作。但刚才忽然一下,流到底是什么?以Java为例,io流大家...

唱不完的离歌
2016/09/06
1K
11
JAVA基础再回首(二十一)——递归、IO流概述、字节流写数据、读取数据、复制数据、字节缓冲流

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m366917/article/details/52433489 JAVA基础再回首(二十一)——递归、IO流概述、字节流写数据、读取数据、复...

Aduroidpc
2016/09/04
0
0
Java IO--字符流--InputStreamReader 和 OutputStreamWriter

今天继续学习字符流的子类!!!! 先来熟悉一下适配器设计模式:(手写的,,嘿嘿) 因为据说InputStreamReader 和OutputStreamWriter采用了适配器模式(现在我还没能理解,先记住) 1 Inpu...

黑色code
2016/12/15
16
0
ffmpeg+ffserver多媒体服务器开发入门

公司需要为Html5客户端配置多媒体服务器。主要是作为媒体server,,音频是实时来自聊天室,中间需要经过一次转码,Opus->mp3,实时转码。 研究了两周,将其中一些心得记录分享下。 1.循环播放...

rootusers
2015/11/13
0
0
和ESP8266 Arduino谈场恋爱 02 这神奇的程序烧写

版权声明:本文为twowinter原创文章,请联系微信公众号twowinter,未经博主允许不得转载。 https://blog.csdn.net/iotisan/article/details/84928341 前言 开发环境搭起来了,接着这篇笔记就...

iotisan
2018/12/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

程序设计基础(C)第06讲例程

1summing.c /* summing.c -- 根据用户键入的整数求和 */#include <stdio.h>int main(void){ long num; long sum = 0L; /* 把sum 初始化为0 */ int status; p......

树人大学数字媒体吴凡
6分钟前
3
0
聊聊nacos config的publishConfig

序 本文主要研究一下nacos config的publishConfig ConfigController nacos-1.1.3/config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigController.java @Controller@R......

go4it
33分钟前
3
0
Eureka应用注册与集群数据同步源码解析

在之前的EurekaClient自动装配及启动流程解析一文中我们提到过,在构造DiscoveryClient类时,会把自身注册到服务端,本文就来分析一下这个注册流程 客户端发起注册 boolean register() t...

Java学习录
42分钟前
11
0
Java描述设计模式(15):责任链模式

本文源码:GitHub·点这里 || GitEE·点这里 一、生活场景描述 1、请假审批流程 公司常见的请假审批流程:请假天数 当 day<=3 天,项目经理审批当 3<day<=5 天,部门经理审批当 day>5 天...

知了一笑
53分钟前
10
0
总结:数组与链表

1、内存申请:数组在内存上是连续的空间;链表,内存地址上可以是不连续的。 2、查询速度:数组可以随机访问,链表必须顺序访问,即从首个元素开始遍历,逐个查找,所以数组查询很快。 3、写入...

浮躁的码农
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部