Java基础-InputStreamReader和OutputSreamWriter
InputStreamReader
InputStreamReader 是字符流Reader的子类,是字节流通向字符流的桥梁。你可以在构造器重指定编码的方式,如果不指定的话将采用底层操作系统的默认编码方式,例如 GBK 等。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。一次只读一个字符。
构造函数
- InputStreamReader(InputStream in)
创建一个inputstreamreader使用默认字符集。 - InputStreamReader(InputStream in, Charset cs)
创建一个inputstreamreader使用给定的字符集。 - InputStreamReader(InputStream in, CharsetDecoder dec)
创建一个inputstreamreader使用给定的字符集解码。 - InputStreamReader(InputStream in, String charsetName)
创建一个inputstreamreader使用指定的字符集。
常用方法
- void close() // 关闭该流并释放与之关联的所有资源。
- String getEncoding() //返回此流使用的字符编码的名称。
- int read() //读取单个字符。
- int read(char[] cbuf, int offset, int length) //将字符读入数组中的某一部分。
OutputStreamWriter
OutputStreamWriter 是字符流Writer的子类,是字符流通向字节流的桥梁。每次调用 write()方法都会导致在给定字符(或字符集)上调用编码转换器。在写入底层输出流之前,得到的这些字节将在缓冲区中累积。一次只写一个字符。
构造函数
- OutputStreamWriter(OutputStream out) //创建使用默认字符编码的 OutputStreamWriter
- OutputStreamWriter(OutputStream out, String charsetName) //创建使用指定字符集的 OutputStreamWriter。
- OutputStreamWriter(OutputStream out, Charset cs) //创建使用给定字符集的 OutputStreamWriter。
- OutputStreamWriter(OutputStream out, CharsetEncoder enc) //创建使用给定字符集编码器的OutputStreamWriter。
常用方法
- void flush()
刷新流。 - String getEncoding()
返回此流使用的字符编码的名称。 - void write(char[] cbuf, int off, int len)
写一个字符数组的一部分。 - void write(int c)
写一个字符。 - void write(String str, int off, int len)
写一个字符串的一部分。
代码实战
public static void ReaderWriterDemoPractice()throws IOException{// 复制StringCharsetNameQuestion.java文件InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(".\\src\\ReaderWriterDemo\\StringCharsetNameQuestion.java"),"UTF-8");OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream(".\\src\\ReaderWriterDemo\\StringCharsetNameQuestionCopy.txt"),inputStreamReader.getEncoding());char[] chars = new char[1024] ;int length = 0 ;while((length = inputStreamReader.read(chars)) != -1){outputStreamWriter.write(chars,0,length);}outputStreamWriter.close();inputStreamReader.close();}
特别注意:编码以及解码问题
延伸
public static void FileReaderWriterTest()throws IOException{FileReader fileReader = new FileReader(".\\src\\ReaderWriterDemo\\StringCharsetNameQuestion.java");FileWriter fileWriter = new FileWriter(".\\src\\ReaderWriterDemo\\StringCharsetNameQuestionCopy2.txt");int length ;char[] chars = new char[1024];while ((length = fileReader.read(chars))!=-1){fileWriter.write(chars,0,length);}fileWriter.close();fileReader.close();}public static void BufferReaderWriter()throws IOException{//BufferedReader bufferedReader = new BufferedReader(new FileReader(".\\src\\ReaderWriterDemo\\StringCharsetNameQuestion.java")) ;// 最好将new InputstreamReader(new FileInputStream())的方式方式,因为这样设定编码方式BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(".\\src\\ReaderWriterDemo\\StringCharsetNameQuestion.java"))) ;BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(".\\src\\ReaderWriterDemo\\StringCharsetNameQuestionCopy3.txt"));// 一次读取一个字符数据char[] chars = new char[1024];int length = 0 ;while((length = bufferedReader.read(chars))!=-1){bufferedWriter.write(chars,0,length);}bufferedWriter.close();bufferedReader.close();}
}
** 注意**整体方法都差不多,参照JDK1.8 API查询一下即可,具体的底层逻辑需要去查看源码
Java基础-InputStreamReader和OutputSreamWriter相关推荐
- Java基础(学习笔记)
其他文章链接 Java基础 Java集合 多线程 JVM MySQL Redis docker 计算机网络 操作系统 文章目录 前言 1.⾯向对象和⾯向过程的区别 2.Java 和 C++的共性与区别 ...
- # Java基础——IO流
Java基础--IO流 File类的使用(熟悉构造器和方法的使用) File类的一个对象,代表一个文件或一个文件目录(俗称:文件夹) File类的声明在java.io包下 文件和文件目录路径的抽象表示 ...
- Java基础部分笔记----------网络编程
2019独角兽企业重金招聘Python工程师标准>>> 1.Java网络基本支持 1.1 InetAddress Java中的InetAddress是一个代表IP地址的对象.IP地址 ...
- Java基础(十一) Stream I/O and Files
Java基础(十一) Stream I/O and Files 1. 流的概念 程序的主要任务是操纵数据.在Java中,把一组有序的数据序列称为流. 依据操作的方向,能够把流分为输入流和输出流两种.程 ...
- Java基础:常用IO流
1. 数据流 1.1 概述 数据流是操作基本数据类型的流,分为数据输入流,数据输出流. 1.2 数据输入流 1.DataInputStream:数据输出流允许应用程序以适当方式将基本 Java 数据类 ...
- Java基础:网络编程
1. 网络编程概述 自从互联网诞生以来,现在基本上所有的程序都是网络程序,很少有单机版的程序了. 计算机网络就是把各个计算机连接到一起,让网络中的计算机可以互相通信.网络编程就是如何在程序中实现两台计 ...
- Java基础day21
Java基础day21 Java基础day21-网络编程 1.网络编程入门 1.1 网络编程概述 1.2 网络编程三要素 1.3 IP地址 1.4InetAddress 2.UDP通信程序 2.1 U ...
- Java基础day19
Java基础day19 Java基础day19-IO流&Properties集合 1.IO流案例 1.1集合到文件数据排序改进版 1.1.1案例需求 1.1.2分析步骤 1.1.3代码实现 1 ...
- Java基础day18
Java基础day18 Java基础day18-字节缓冲流&字符流 1.字节缓冲流 1.1字节缓冲流构造方法 1.2字节流复制视频 2.字符流 2.1为什么会出现字符流 2.2编码表 2.3字 ...
最新文章
- LVS实现负载均衡及高可用
- 运行shell脚本时报错[[ : not found解决方法
- Linux-xargs命令
- DL之CNN:卷积神经网络算法简介之原理简介——CNN网络的3D可视化(LeNet-5为例可视化)
- c语言程序设计实验二模板,C语言程序设计实验二.doc
- iOS:Core Data 中的简单ORM
- Idea Marketplace 加载很慢 加载不出来
- 推荐实践:新一代Rank技术在阿里巴巴定向广告推荐系统中的应用与实践
- 6.2创建Docker镜像文件
- 成功凤凰刷机刷出诺基亚E5系统版本042.014纯净简体中文版
- python函数中文手册-python手册中文版 python函数中文手册.doc
- cf鼠标宏数据大全_两只“轻量、不打孔、右手工学”鼠标,DX30E和魔幻豹ULTRA
- 科来网络分析系统11.1(技术交流免费版)
- 今日更新京东皮卡丘1.7修复链接和预约抢购下单商品,手机端茅台抢购软同步上架(可配备群控使用)
- Redis Desktop Manager 2020.2 Windows 源码编译
- 修改mtk平台power按键的gpio控制口
- VScode 模糊查找替换 正则
- 使用MiKTeX和TeXstudio编辑latex
- 计算机应用基础上册周测7,计算机应用基础(第3版)周南岳(win7+office10)期末复习及答案-20210614221003.docx-原创力文档...
- ScrollView文字竖直滚动