字节流
输入字节流:
---------| InputStream 所有输入字节流的基类。 抽象类。
------------| FileInputStream 读取文件的输入字节流。
------------| BufferedInputStream 缓冲输入字节流。 该类内部其实就是维护了一个8kb(8192b)字节数组而已。 该类出现的目的是为了提高读取文件数据的效率。

输出字节流:
---------| OutputStream 所有输出字节流的基类。 抽象类。
------------| FileOutputStream 向文件输出数据 的输出字节流。
------------| BufferedOutputStream 缓冲输出字节流。 该类出现的目的是为了提高向文件写数据的效率。 该类内部其实也是维护了一个8kb(8192b)的字节数组而已。

什么情况使用字节流
读取到数据不需要经过编码或者解码的情况情况下这时候使用字节流。比如:图片数据

字符流
字符流 = 字节流 + 编码(解码)

输入字符流
--------| Reader 所有输入字符流的基类。 抽象类。
-----------| FileReader 读取文件字符的输入字符流。 
-----------| BufferedReader 缓冲输入字符流。 该类出现的目的是为了提高读取文件字符的效率并且拓展了功能(readLine()),它内部 其实就是维护了一个8192个长度的字符数组。

  ps:BufferedInputStream维护了一个8192长度的字节数组(byte[]),BufferedReader维护了一个8192长度的字符数组(char[])

输出字符流
-------| Writer 所有输出字符流的基类。 抽象类。
------------| FileWriter 向文件输出字符数据的输出字符流。
---------------| BufferedWriter 缓冲输出字符流。该类出现的目的是为了提高写文件字符的效率并且拓展了功能(newLine())。

什么情况下使用字符流:如果读写的都是字符数据,这时候我们就使用字符流。

字节转字符流(转换流)
输入字节流的转换流 输入字节流---------输入字符流
InputSrteamReader

输出字节流的转换流
OutputStreamWriter

转换流的作用
1. 可以把对应的字节流转换成字符流使用。
2. 可以指定码表进行读写文件的数据。

FileReader, FileWriter这两个类默认是使用的是gbk编码 表。不能由你来指定码表读写文件数据。

public class Demo1 {

    public static void main(String[] args) throws Exception {
// testInput();
// writeFile();
readFile();
} public static void readFile() throws IOException{
//建立文件与程序的输入数据通道
FileInputStream fileInputStream = new FileInputStream("F:\\a.txt");
//创建输入字节流的转换流并且指定码表进行读取
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream,"utf-8");
int content = 0;
while((content = inputStreamReader.read())!=-1){
System.out.println((char)content);
}
//关闭资源
inputStreamReader.close(); /*FileReader fileReader = new FileReader("F:\\a.txt"); //默认使用的是gbk码表
int content = 0;
while((content = fileReader.read())!=-1){
System.out.print((char)content);
} //关闭资源
fileReader.close();*/ } //指定使用utf-8码表把数据写出到文件上。
public static void writeFile() throws IOException{
//建立了文件与程序的数据 通道
FileOutputStream fileOutputStream = new FileOutputStream("F:\\a.txt");
//创建一个输出字节流的转换流并且指定码表进行写数据
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream,"utf-8");
outputStreamWriter.write("大家好"); //中文在utf-8码表中占三个字节。 //关闭资源
outputStreamWriter.close();
} public static void testOutput() throws Exception{
Socket socket = new Socket(InetAddress.getLocalHost(),9090);
//获取到socket的输出流对象。
OutputStream outputStream = socket.getOutputStream();
//把输出字节流转换成输出字符流
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream);
outputStreamWriter.write("不饿!");
} public static void testInput() throws Exception{
InputStream in = System.in;
// int content = in.read(); // 每次只会读取到一个字节的数据 //需要把字节流转换成字符流使用。
InputStreamReader inputStreamReader = new InputStreamReader(in); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); System.out.println(bufferedReader.readLine());
} }

InputStreamReader/Writer路线:

1 import java.io.BufferedReader;
2 import java.io.BufferedWriter;
3 import java.io.File;
4 import java.io.FileInputStream;
5 import java.io.FileNotFoundException;
6 import java.io.FileOutputStream;
7 import java.io.IOException;
8 import java.io.InputStreamReader;
9 import java.io.OutputStreamWriter;
10 import java.io.UnsupportedEncodingException;
11
12 /**
13 * 用InputStreamReader/Writer路线
14 *
15 * @author ixenos
16 *
17 */
18 public class JDKIODemo1 {
19
20 public static void main(String[] args) {
21 File file = new File("imUTF8.txt");
22 File file2 = new File("imOutput.txt");
23 try {
24 FileInputStream fis = new FileInputStream(file);
25 FileOutputStream fos = new FileOutputStream(file2);
26
27 InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
28 OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
29
30 BufferedReader br = new BufferedReader(isr);
31 BufferedWriter bw = new BufferedWriter(osw);
32
33 String line;
34 while ((line = br.readLine()) != null) {
35 System.out.println(line);
36
37 bw.write(line);
38 bw.newLine();// 写入分隔符(内部是line.separator)
39 }
40
41 br.close();
42 bw.close();
43 isr.close();
44 osw.close();
45 fis.close();
46 fos.close();
47 System.out.println("done");
48
49 //
50 // //不用BufferedReader时
51 // FileInputStream fis = new FileInputStream(file);
52 // FileOutputStream fos = new FileOutputStream(file2);
53 // InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
54 // OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
55 //
56 // char[] buf = new char[1024];
57 // int len = 0; // 用以标志最后一组字符串的末尾值,防止多读
58 // while ((len = isr.read(buf)) != -1) {
59 // System.out.println(new String(buf, 0, len));
60 // osw.write(buf, 0, len);//自动写分隔符
61 // }
62 //
63 // isr.close();
64 // osw.close();
65 // fis.close();
66 // fos.close();
67 // System.out.println("done");
68
69
70 } catch (UnsupportedEncodingException e) {
71 e.printStackTrace();
72 } catch (FileNotFoundException e) {
73 e.printStackTrace();
74 } catch (IOException e) {
75 e.printStackTrace();
76 }
77
78 }
79
80 }

FileReader/Writer路线:

1 import java.io.BufferedReader;
2 import java.io.BufferedWriter;
3 import java.io.File;
4 import java.io.FileNotFoundException;
5 import java.io.FileReader;
6 import java.io.FileWriter;
7 import java.io.IOException;
8
9 /**
10 * FileReader/Writer路线
11 *
12 * 关键:FileReader是InputStreamReader的子类
13 * JDK的FileReader只能用系统默认编码,我把eclipse默认设为UTF-8,所以正常
14 *
15 * @author ixenos
16 *
17 */
18 public class JDKIODemo2 {
19
20 public static void main(String[] args) {
21 File file = new File("imGBK.txt");
22 File file2 = new File("imOutput.txt");
23 try {
24 FileReader fr = new FileReader(file);
25 FileWriter fw = new FileWriter(file2);
26 BufferedReader br = new BufferedReader(fr);
27 BufferedWriter bw = new BufferedWriter(fw);
28 String line = null;
29 while ((line = br.readLine()) != null) {
30 System.out.println(line);
31 bw.write(line);
32 bw.newLine();// 需要手动换行
33 }
34 br.close();
35 bw.close();
36 fr.close();
37 fw.close();
38
39
40 // // 不用BufferedReader时
41 // FileReader fr = new FileReader(file);
42 // FileWriter fw = new FileWriter(file2);
43 // char[] buf = new char[1024];
44 // int len = 0; // 用以标志最后一组字符串的末尾值,防止多读
45 // while ((len = fr.read(buf)) != -1) {
46 // System.out.println(new String(buf, 0, len));
47 //
48 // fw.write(buf, 0, len);// 自动换行
49 // }
50 // fr.close();
51 // fw.close();
52
53 } catch (FileNotFoundException e) {
54 e.printStackTrace();
55 } catch (IOException e) {
56 e.printStackTrace();
57 }
58
59 }
60
61 }

---------------------
作者:宇翔XGT
来源:CSDN
原文:https://blog.csdn.net/u012469528/article/details/78628585
版权声明:本文为博主原创文章,转载请附上博文链接!

【转载】Java IO 转换流 字节转字符流的更多相关文章

  1. Java IO 转换流 字节转字符流

    Java IO 转换流 字节转字符流 @author ixenos 字节流 输入字节流:---------| InputStream 所有输入字节流的基类. 抽象类.------------| Fil ...

  2. Java IO(十二) 字符流 Writer 和 Reader

    Java IO(十二) 字符流 Reader和 Writer 一.介绍 涉及到文件(如果是纯文本文件形式)操作时,Java除了提供 FIle(文件和目录路径名的抽象表示形式) 和 FileDescri ...

  3. java IO(五):字节流、字符流的选择规律

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  4. Java IO学习--(五)字节和字符数组

    内容列表 从InputStream或者Reader中读入数组 从OutputStream或者Writer中写数组 在java中常用字节和字符数组在应用中临时存储数据.而这些数组又是通常的数据读取来源或 ...

  5. (转载) java:IO流学习小结

    今天刚刚看完Java的io流操作,把主要的脉络看了一遍,不能保证以后使用时都能得心应手,但是最起码用到时知道有这么一个功能可以实现,下面对学习进行一下简单的总结: IO流主要用于硬板.内存.键盘等处理 ...

  6. Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律

    第一讲     IO概述 概述 1.IO流:即InputOutput的缩写. 2.特点: 1)IO流用来处理设备间的数据传输. 2)Java对数据的操作是通过流的方式. 3)Java用于操作流的对象都 ...

  7. Java之IO初识(字节流和字符流)

    IO概述 生活中,你肯定经历过这样的场景.当你编辑一个文本文件,忘记了 ctrl+s ,可能文件就白白编辑了.当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里.那么数据都是在哪些设备上的呢 ...

  8. java基础46 IO流技术(输出字符流/缓冲输出字符流)

    一.输出字符流 1.1.输出字符流体系 --------| Writer:输出字符流的基类(抽象类)  ----------| FileWriter:向文件输出数据输出字符流(把程序中的数据写到硬盘中 ...

  9. 深入理解JAVA I/O系列三:字符流详解

    字符流为何存在 既然字节流提供了能够处理任何类型的输入/输出操作的功能,那为什么还要存在字符流呢?容我慢慢道来,字节流不能直接操作Unicode字符,因为一个字符有两个字节,字节流一次只能操作一个字节 ...

随机推荐

  1. [luogu2209][USACO13]燃油经济性Fuel Economy_贪心

    燃油经济性Fuel Economy 题目大意:FJ想要去旅行.他的车总容量为G,每行驶一个单位就消耗一个单位的油.FJ要行驶D个单位的距离.期间存在n个加油站,每个加油站有一个价格,表示在这个燃油站买 ...

  2. Linux轻松一下——cowsay命令,让动物说话

    Linux动物说话命令 使用方法 安装命令:sudo apt-get install cowsay 使用命令:cowsay hello 查看可选动物 cowsay -l 使用其他动物 cowsay - ...

  3. 洛谷 P1378 油滴扩展

    P1378 油滴扩展 题目描述 在一个长方形框子里,最多有N(0≤N≤6)个相异的点,在其中任何一个点上放一个很小的油滴,那么这个油滴会一直扩展,直到接触到其他油滴或者框子的边界.必须等一个油滴扩展完 ...

  4. ZooKeeper的配置文件优化性能(转)

    一.前言 ZooKeeper的功能特性通过ZooKeeper配置文件来进行控制管理( zoo.cfg配置文件). ZooKeeper这样的设计其实是有它自身的原因的.通过前面对ZooKeeper的配置 ...

  5. [转]C#操作SQL Server数据库

    转自:C#操作SQL Server数据库 1.概述 ado.net提供了丰富的数据库操作,这些操作可以分为三个步骤: 第一,使用SqlConnection对象连接数据库: 第二,建立SqlComman ...

  6. HDU 4508

    祼的完全背包问题 #include <iostream> #include <cstdio> #include <cstring> #include <alg ...

  7. linux下启动jekins报错

    进入默认安装目录,执行java -jar jekins.war 启动使用端口号: java -jar jenkins.war --httpPort=8085,即启动完成 这个有个弊端,关闭后下次还得这 ...

  8. 最全Linux 与 Linux Windows 文件共享

    前提说明: windows主机信息:192.168.1.100 帐号:abc password:123 共享目录:share linux主机信息:192.168.1.200 帐号:def passwo ...

  9. 的Linq未提交之前插入/修改时重新查询不准确问题

    来园子已经两年了,每次都是看,这次咱也写一次. 说一下今天遇到的Linq问题: 每一次插入流水表时,都需要查找表中最大的流水号+1,并且将该流水号返回,但是在同一个SubmitChange之内插入多条 ...

  10. hdoj Radar Installation

    Problem Description Assume the coasting is an infinite straight line. Land is in one side of coastin ...