转换流

摘要:

InputStreamReader和OutputStreamWriter他们分别是FileReader和FileWriter的父类

当只是单纯的读写文件而不改变文件的编码格式时,就分别用他们的子类就可以

而当要改变编码格式不用系统默认编码格式(GBK)时,就需要用他们的父类来处理,父类提供了改变编码格式的方法。

OutputStreamWriter类

OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节。

它的作用的就是,将字符串按照指定的编码表转成字节,在使用字节流将这些字节写出去。

public static void main(String[] args) throws IOException {
FileOutputStream fos=new FileOutputStream("e:\\test\\utf8.txt",true);
OutputStreamWriter osw=new OutputStreamWriter(fos,"utf-8");
osw.write("这是utf-8编码haha");
osw.close();
}

当我们调用OutputStreamWriter对象的write方法时,会拿着字符到指定的码表中进行查询,把查到的字符编码值转成字节数存放到OutputStreamWriter缓冲区中。

然后再调用刷新功能,或者关闭流,或者缓冲区存满后会把缓冲区中的字节数据使用字节流写到指定的文件中。

InputStreamReader类

public static void main(String[] args) throws IOException {
//明确数据源
FileInputStream fis=new FileInputStream("e:\\test\\utf8.txt");
InputStreamReader isr=new InputStreamReader(fis,"utf-8");
char[] ch=new char[1024];
int len=0;
while((len=isr.read(ch))!=-1){
System.out.println(new String(ch,0,len));
}
isr.close();
}

总结:

字节--->字符 : 看不懂的--->看的懂的。  需要读。输入流。 InputStreamReader

字符--->字节 : 看的懂的--->看不懂的。  需要写。输出流。 OutputStreamWriter

缓冲流

字节缓冲流

①写入数据到流中,字节缓冲输出流 BufferedOutputStream

②读取流中的数据,字节缓冲输入流 BufferedInputStream

它们的内部都包含了一个缓冲区,通过缓冲区读写,就可以提高了IO流的读写速度

字节缓冲输出流BufferedOutputStream

构造方法:

public BufferedOutputStream(OutputStream out)创建一个新的缓冲输出流,以将数据写入指定的底层输出流。

//缓冲字节输出流
public static void method1() throws IOException{
FileOutputStream fos=new FileOutputStream("e:\\test\\haha",true);
BufferedOutputStream bos=new BufferedOutputStream(fos);
//bos.write(100);
bos.write("你好啊".getBytes());
bos.close();
}

字节缓冲输入流 BufferedInputStream

构造方法:

public BufferedInputStream(InputStream in)

//缓冲字节输入流
public static void method2() throws IOException{
FileInputStream fis=new FileInputStream("e:\\test\\haha");
BufferedInputStream bis=new BufferedInputStream(fis);
int len=0;
while((len=bis.read())!=-1){
System.out.print((char)len);
}
bis.close();
}

实例:

对比字节流read(),字节流read(byte []),缓冲字节流read(),缓冲字节流read(byte [])它们的速度

//字节流read()
public static void method1() throws IOException{
long time1=System.currentTimeMillis();
FileInputStream fis=new FileInputStream("d:\\DW\\jdk\\javafx-src.zip");
FileOutputStream fos=new FileOutputStream("e:\\test\\text\\haha1.zip");
int len=0;
while((len=fis.read())!=-1){
fos.write(len);
}
long time2=System.currentTimeMillis();
System.out.println(time2-time1);
fis.close();
fos.close();
}
//字节流read(byte [])
public static void method2() throws IOException{
long time1=System.currentTimeMillis();
FileInputStream fis=new FileInputStream("d:\\DW\\jdk\\javafx-src.zip");
FileOutputStream fos=new FileOutputStream("e:\\test\\text\\haha2.zip");
int len=0;
byte[] bytes=new byte[1024];
while((len=fis.read(bytes))!=-1){
fos.write(bytes, 0, len);
}
long time2=System.currentTimeMillis();
System.out.println(time2-time1);
fis.close();
fos.close();
}
//缓冲字节流read()
public static void method3() throws IOException{
long time1=System.currentTimeMillis();
FileInputStream fis=new FileInputStream("d:\\DW\\jdk\\javafx-src.zip");
BufferedInputStream bis=new BufferedInputStream(fis);
FileOutputStream fos=new FileOutputStream("e:\\test\\text\\haha3.zip");
BufferedOutputStream bos=new BufferedOutputStream(fos);
int len=0;
while((len=bis.read())!=-1){
bos.write(len);
}
long time2=System.currentTimeMillis();
System.out.println(time2-time1);
fis.close();
fos.close();
}
//缓冲字节流read(byte [])
public static void method4() throws IOException{
long time1=System.currentTimeMillis();
FileInputStream fis=new FileInputStream("d:\\DW\\jdk\\javafx-src.zip");
BufferedInputStream bis=new BufferedInputStream(fis);
FileOutputStream fos=new FileOutputStream("e:\\test\\text\\haha4.zip");
BufferedOutputStream bos=new BufferedOutputStream(fos);
int len=0;
byte[] bytes=new byte[1024];
while((len=bis.read(bytes))!=-1){
bos.write(bytes, 0, len);
}
long time2=System.currentTimeMillis();
System.out.println(time2-time1);
fis.close();
fos.close();
}

结果:

文件大小:4m

字节流read() VS 字节流read(byte [])
150296毫秒 200毫秒
字节流read(byte [])完胜

缓冲字节流read() VS缓冲字节流read(byte [])
410毫秒 60毫秒
缓冲字节流read(byte [])完胜

速度总结:(慢——>快)

字节流read(),缓冲字节流read() ,字节流read(byte []),缓冲字节流read(byte [])

IO—》转换流和缓冲流的更多相关文章

  1. IO流----转换流、缓冲流

    打开一个文本文件,另存为: Ansi就是系统默认编码(就是gbk) 建一个编码是utf-8的txt文件, 例: import java.io.FileWriter; import java.io.IO ...

  2. IO(转换流、缓冲流)

    第1章 转换流 在学习字符流(FileReader.FileWriter)的时候,其中说如果需要指定编码和缓冲区大小时,可以在字节流的基础上,构造一个InputStreamReader或者Output ...

  3. java:IO流(处理流(缓冲流,转换流,数据流),对象的序列化,Properties)

    字节缓冲流:(BufferedInputStream,BufferedOutStream) *按照流的功能来分:节点流和处理流 *节点流可以直接操作数据源: *InputStream *--FileI ...

  4. Java转换流、缓冲流、流操作规律整理

    转换流 1.1                OutputStreamWriter类 OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字 ...

  5. Java_转换流和缓冲流

    今日内容介绍 转换流 缓冲流 1 转换流 在学习字符流(FileReader.FileWriter)的时候,其中说如果需要指定编码和缓冲区大小时,可以在字节流的基础上,构造一个InputStreamR ...

  6. java基础(24):转换流、缓冲流

    1. 转换流 在学习字符流(FileReader.FileWriter)的时候,其中说如果需要指定编码和缓冲区大小时,可以在字节流的基础上,构造一个InputStreamReader或者OutputS ...

  7. java的 IO流之缓冲流(转载)

    java缓冲流本身不具IO功能,只是在别的流上加上缓冲提高效率,像是为别的流装上一种包装.当对文件或其他目标频繁读写或操作效率低,效能差.这时使用缓冲流能够更高效的读写信息.因为缓冲流先将数据缓存起来 ...

  8. IO流之缓冲流

    缓冲流 Java中提高了一套缓冲流,它的存在,可提高IO流的读写速度 缓冲流,根据流的分类字节缓冲流与字符缓冲流. 字节缓冲流 字节缓冲流根据流的方向,共有2个 l  写入数据到流中,字节缓冲输出流 ...

  9. java - >IO流_缓冲流(高效流)

    缓冲流(高效流) 在我们学习字节流与字符流的时候,大家都进行过读取文件中数据的操作,读取数据量大的文件时,读取的速度会很慢,很影响我们程序的效率,那么,我想提高速度,怎么办? Java中提高了一套缓冲 ...

随机推荐

  1. 【反转开灯问题】Face The Right Way

    题目 Farmer John has arranged his N (1 ≤ N ≤ 5,000) cows in a row and many of them are facing forward, ...

  2. python中 _、__、__xx__() 区别及使用场景

    1.访问权限(private.public)与继承方式(只有public继承) 在面向对象编程语言中,类的属性与方法都会设置访问控制权限,从而满足我们的设计需求.一般而言,我们通常会将对象的属性设置为 ...

  3. 题解 P5937 【[CEOI1999]Parity Game】

    这道题有两种做法,一种是 扩展域(种类并查集),一种是 边带权(带权并查集).种类并查集貌似应该都比带权并查集简单,所以先讲种类并查集的做法,再讲带权并查集 种类并查集 若 sum[ l ~ r ] ...

  4. 2020年全新web前端学习路线图,学完就业20K!

    第一阶段:HTML5+css 配套学习视频: 前端小白零基础入门HTML5+CSS3 第二阶段:移动web网页开发 移动web进阶教程 第三阶段:JavaScript网页编程 前端与移动开发基础入门到 ...

  5. Sharepoint 2013设置customErrors

    原文地址:http://www.cnblogs.com/renzh/archive/2013/03/05/2944309.html#3407239 一.首先设置IIS中的Web.config文件 找到 ...

  6. Redundant Paths 分离的路径【边双连通分量】

    Redundant Paths 分离的路径 题目描述 In order to get from one of the F (1 <= F <= 5,000) grazing fields ...

  7. css条纹背景样式、及方格斜纹背景的实现

    一.横向条纹如下代码: background: linear-gradient(#fb3 %, #58a %) 上面代码表示整个图片的上部分20%和下部分20%是对应的纯色,只有中间的部分是渐变色.如 ...

  8. css可以修改超链接颜色吗?

    超链接a标签大家都应该很熟悉,这篇文章主要的讲的是a标签的基础css样式设置,下面我们来看一下css修改超链接颜色的方法. css可以使用下面几个伪类来设置超链接: a:link :是未被访问的样式, ...

  9. HDU5961 传递

    传递 因为文化课复习实在捉急qwq,题解就一切从简了qwq 简单说一说 上来一看这道题没看出来突破点在哪... 去HDU上看原题,发现原题是带样例的图解的,然鹅还是没找到思路(太菜了吧) 没办法看了一 ...

  10. os.environ的详解

    我们想要用Python获得一些有关系统的各种信息的时候就不得不想到os的environ,那这里面都具体包含了那些内容呢? 简介 对于官方的解释,environ是一个字符串所对应环境的映像对象.这是什么 ...