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),字节流顾名思义字节流就是将文件的内容读取到字节数组,然后再输出到另一个文件中.而字 ...
随机推荐
- Centos yum的源 设置为阿里云源
在 阿里巴巴镜像站页面,在centos 操作的帮助,有介绍 wget和curl 2种方式来下载CentOS-Base.repo 备份 mv /etc/yum.repos.d/CentOS-Base.r ...
- java23种设计模式(二)-- 建造者模式和原型模式
一.建造者模式 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创造不同的表示. 特点: (1).在某些属性没有赋值之前,复杂对象不能作为一个完整的产品使用.比如汽车包括方向盘.车门.发动机 ...
- pip飞起来了
这里说下Windows下的修改方法,看了网上很多的教程发现都不行,尝试了好久终于发现了可行的方法. 找到python安装目录下的:\Lib\site-packages\pip\models\index ...
- spring的 onApplicationEvent方法被执行两次问题
原文地址:http://www.cnblogs.com/a757956132/p/5039438.html 在做web项目开发中,尤其是企业级应用开发的时候,往往会在工程启动的时候做许多的前置检查. ...
- SpringBoot使用Swagger2搭建强大的RESTful API 文档功能
swagger用于定义API文档. Swagger2的使用 Maven Plugin添加Swagger2相关jar包 <!--swagger2 start--> <dependenc ...
- MySQL教程和使用手册
MySQL 教程 MySQL 教程.MySQL 安装.MySQL 管理.MySQL PHP 语法.MySQL 连接.MySQL 创建数据库.MySQL 删除数据库.MySQL 选择数据库.MySQL ...
- tidb入门
由于目前的项目把mysql换成了TiDb,所以特意来了解下tidb.其实也不能说换,由于tidb和mysql几乎完全兼容,所以我们的程序没有任何改动就完成了数据库从mysql到TiDb的转换,TiDB ...
- python学习笔记:模块——os模块(操作文件/目录)
import os os.rename(old,new) #重命名文件或目录 os.remove(f)#删除文件 os.mkdir('china/beijing') #创建文件夹 os.makedir ...
- activi7流程部署
package com.zcc.acvitivi; import org.activiti.engine.ProcessEngine;import org.activiti.engine.Proces ...
- The Accomodation of Students HDU - 2444 二分图判定 + 二分图最大匹配 即二分图-安排房间
/*655.二分图-安排房间 (10分)C时间限制:3000 毫秒 | C内存限制:3000 Kb题目内容: 有一群学生,他们之间有的认识有的不认识.现在要求把学生分成2组,其中同一个组的人相互不认 ...