Java中IO流之字符流

我们有了字节流,为什么还需要字符流?
字符的底层是 字节 + 编码表 = 字符,字符是人能看懂的信息。

字符流在使用的时候,会以字节流为基础,把字节写入缓冲区,在缓冲区内根据编码类型(UTF-8,GBK等)编码成对应的字符。
如果程序运行中需要向硬盘里读入字符或者保存字符,使用字节流的话会由于没有缓冲区进行编码翻译,
程序运行环境与外界环境的编码方式不统一导致乱码。
但是如果使用字符流复制粘贴文件,那么在缓冲区内的编码解码过程会极大的拖慢复制时间。
字符流的使用:


字符流抽象基类Reader和Writer分别实现了read和wirte方法,之后的
IntputStreamReader/OutputStreamWriter
FileReader/FileWriter
都使用read()和write()方法。
字符流的Writer()方法:


字符流的read()方法:

字符:



字符数组:



InputStreamReader/OutputStreamReader:
用法与字节流FileInputStream和FileOutputStream类似,但是它有缓冲区(不同于缓冲流)构造方法可以添加编码格式。
InputStreamReader/OutputStreamReader的底层原理:
以OutputStreamReader为例:

程序划分char[] chr = new char[1024];为字符流缓冲区,在缓冲区内部,把我们write("中国")中的"中国"
按照构造函数里的"utf-8"解码成字节,然后存在缓冲区内部。
我们调用osw.flush();方法才能把缓冲区刷入osw.txt。进入的方法是调用字节流,这也是为什么字符流的构造方法里
必须传入一个字节流。在osw.txt那边接收到了传入的字节,由记事本等编辑器把字节转码成字符。
同理IntputStreamReader:

如果编码格式不正确,比如utf-8写成了GBK:


String类提供的编码解码方法:


FileReader/FileWriter:
用于读写字符文件的便捷类,用法与字节流FileInputStream和FileOutputStream相同,构造中不可以修改编码格式。


FileReader:

FileWriter:

字符缓冲流:

特有方法:
readLine();读入一行
newLine();写入换行
例题:

要求把5个学生对象存入到集合中,对象的信息写出到当前项目下的student.txt文件中,要求每个学生信息独占一行,
按照年龄大小排序。


再从student.txt读出学生信息并且以对象形式存储在集合中,并且输出。


Java中IO流之字符流的更多相关文章
- JAVA中的字节流与字符流
字节流与字符流的区别? 字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用 ...
- java中OutputStream字节流与字符流InputStreamReader 每一种基本IO流BufferedOutputStream,FileInputStream,FileOutputStream,BufferedInputStream,BufferedReader,BufferedWriter,FileInputStream,FileReader,FileWriter,InputStr
BufferedOutputStream,FileInputStream,FileOutputStream,BufferedInputStream,BufferedReader,BufferedWri ...
- Java中的字节流,字符流,字节缓冲区,字符缓冲区复制文件
一:创建方式 1.建立输入(读)对象,并绑定数据源 2.建立输出(写)对象,并绑定目的地 3.将读到的内容遍历出来,然后在通过字符或者字节写入 4.资源访问过后关闭,先创建的后关闭,后创建的先关闭 ...
- Java文件(io)编程——文件字符流的使用
案例1: 读取一个文件并写入到另一个文件中,char[] 来中转. 首先要在E盘下创建一个文本文档,命名为test.txt,输入一些字符串. public class Demo_5 { public ...
- Java中字节流如何转字符流,OutputStreamWriter用法
OutputStreamWriter 将字节流转换为字符流.是字节流通向字符流的桥梁.如果不指定字符集编码,该解码过程将使用平台默认的字符编码,如:UTF-8: 步骤: 1.创建流 子类对象 绑定数 ...
- java IO流 之 字符流
字符是我们能读懂的一些文字和符号,但在计算机中存储的却是我们看不懂的byte 字节,那这就存在关于字符编码解码的问题.所以在学习Io流的字符流前我们先了解些关于编码问题. 一.字符集与字符编码 1.什 ...
- JAVA IO 字节流与字符流
文章出自:听云博客 题主将以三个章节的篇幅来讲解JAVA IO的内容 . 第一节JAVA IO包的框架体系和源码分析,第二节,序列化反序列化和IO的设计模块,第三节异步IO. 本文是第一节. ...
- Java:IO流之字符流Reader、Writer详解
java.io包中:字符流 字符流的两个抽象基类: Reader Writer 文件的读取:Reader抽象类(java.io包中) 直接子类的构造方法: FileRead ...
- Java中IO流的总结
有关Java中IO流总结图 流分类 按方向分 输入流 输出流 按单位分 字节流 字符流 按功能分 节点流 处理流(过滤流) 其他 所有的流继承与这四类流:InputSteam.OutputStream ...
- Java IO 字节流与字符流 (五)
Java的IO流分为字符流(Reader,Writer)和字节流(InputStream,OutputStream),字节流顾名思义字节流就是将文件的内容读取到字节数组,然后再输出到另一个文件中.而字 ...
随机推荐
- java命令-jstack
jstack用于生产java虚拟机当前时刻的线程快照.线程快照是当前java虚拟机内每一条线程正在执行的方法 堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,比如线程间死锁.死循环. ...
- Elasticsearch 分布式文档存储
shard = hash(routing) % number_of_primary_shards决定文档在哪个分片上,routing 是一个可变值,默认是文档的 _id ,也可以设置成一个自定义的值. ...
- disk或者Partition镜像的制作
备份镜像还原一般都是在client-server端这边才有涉及,不过作为平时爱折腾的咸鱼,表示偶尔玩玩这种操作也不错: 工具:pc X 1(装有 大白菜,装机吧,一类制作pe软件的即可,大同小异) ...
- 理解Java的Class类、"this."关键字、Constructor构造器(一)
import java.util.*; public class BookTest { public static void main(String[] args) { //Book book = n ...
- loadRunner之接口测试
接口测试需求: 1.脚本支持循环测试,并且每次测试的请求报文不一样(字段stbId每次请求不一样) 2.输出每次测试的请求报文和响应报文 3.根据响应报文判断接口调用是否成功 4.输出最终测试结果:循 ...
- Python字典操作及课后练习
'''dict,唯一一个映射数据类型数据类型划分:可变数据类型,不可变数据类型不可变数据类型:元组,bool int str(对str的任何改变都是形成了新的str,对原来的str没有改变)可变数据类 ...
- JS - 计算两个数组的交集、差集、并集、补集(多种实现方式)
方法一:最普遍的做法 使用 ES5 语法来实现虽然会麻烦些,但兼容性最好,不用考虑浏览器 JavaScript 版本.也不用引入其他第三方库. 1,直接使用 filter.concat 来计算 var ...
- 使用Microsoft.Practices.Unity 依赖注入 转载https://www.cnblogs.com/slardar1978/p/4205394.html
Unity是微软Patterns & Practices团队所开发的一个轻量级的,并且可扩展的依赖注入(Dependency Injection)容器,它支持常用的三种依赖注入方式:构造器注入 ...
- webstorm 去点右边白线
file>settings>editor>general>appearance>show right margin(configured in code style oo ...
- Tomcat 配置安装
1 下载和安装Tomcat服务器 Tomcat官方站点:http://jakarta.apache.org 下载Tomcat安装程序包:http://tomcat.apache.org/ 启动和测试T ...