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相关推荐

  1. Java基础(学习笔记)

    其他文章链接 Java基础 Java集合 多线程 JVM MySQL Redis docker 计算机网络 操作系统 文章目录 前言 1.⾯向对象和⾯向过程的区别 2.Java 和 C++的共性与区别 ...

  2. # Java基础——IO流

    Java基础--IO流 File类的使用(熟悉构造器和方法的使用) File类的一个对象,代表一个文件或一个文件目录(俗称:文件夹) File类的声明在java.io包下 文件和文件目录路径的抽象表示 ...

  3. Java基础部分笔记----------网络编程

    2019独角兽企业重金招聘Python工程师标准>>> 1.Java网络基本支持 1.1 InetAddress Java中的InetAddress是一个代表IP地址的对象.IP地址 ...

  4. Java基础(十一) Stream I/O and Files

    Java基础(十一) Stream I/O and Files 1. 流的概念 程序的主要任务是操纵数据.在Java中,把一组有序的数据序列称为流. 依据操作的方向,能够把流分为输入流和输出流两种.程 ...

  5. Java基础:常用IO流

    1. 数据流 1.1 概述 数据流是操作基本数据类型的流,分为数据输入流,数据输出流. 1.2 数据输入流 1.DataInputStream:数据输出流允许应用程序以适当方式将基本 Java 数据类 ...

  6. Java基础:网络编程

    1. 网络编程概述 自从互联网诞生以来,现在基本上所有的程序都是网络程序,很少有单机版的程序了. 计算机网络就是把各个计算机连接到一起,让网络中的计算机可以互相通信.网络编程就是如何在程序中实现两台计 ...

  7. Java基础day21

    Java基础day21 Java基础day21-网络编程 1.网络编程入门 1.1 网络编程概述 1.2 网络编程三要素 1.3 IP地址 1.4InetAddress 2.UDP通信程序 2.1 U ...

  8. Java基础day19

    Java基础day19 Java基础day19-IO流&Properties集合 1.IO流案例 1.1集合到文件数据排序改进版 1.1.1案例需求 1.1.2分析步骤 1.1.3代码实现 1 ...

  9. Java基础day18

    Java基础day18 Java基础day18-字节缓冲流&字符流 1.字节缓冲流 1.1字节缓冲流构造方法 1.2字节流复制视频 2.字符流 2.1为什么会出现字符流 2.2编码表 2.3字 ...

最新文章

  1. LVS实现负载均衡及高可用
  2. 运行shell脚本时报错[[ : not found解决方法
  3. Linux-xargs命令
  4. DL之CNN:卷积神经网络算法简介之原理简介——CNN网络的3D可视化(LeNet-5为例可视化)
  5. c语言程序设计实验二模板,C语言程序设计实验二.doc
  6. iOS:Core Data 中的简单ORM
  7. Idea Marketplace 加载很慢 加载不出来
  8. 推荐实践:新一代Rank技术在阿里巴巴定向广告推荐系统中的应用与实践
  9. 6.2创建Docker镜像文件
  10. 成功凤凰刷机刷出诺基亚E5系统版本042.014纯净简体中文版
  11. python函数中文手册-python手册中文版 python函数中文手册.doc
  12. cf鼠标宏数据大全_两只“轻量、不打孔、右手工学”鼠标,DX30E和魔幻豹ULTRA
  13. 科来网络分析系统11.1(技术交流免费版)
  14. 今日更新京东皮卡丘1.7修复链接和预约抢购下单商品,手机端茅台抢购软同步上架(可配备群控使用)
  15. Redis Desktop Manager 2020.2 Windows 源码编译
  16. 修改mtk平台power按键的gpio控制口
  17. VScode 模糊查找替换 正则
  18. 使用MiKTeX和TeXstudio编辑latex
  19. 计算机应用基础上册周测7,计算机应用基础(第3版)周南岳(win7+office10)期末复习及答案-20210614221003.docx-原创力文档...
  20. ScrollView文字竖直滚动

热门文章

  1. 动画版《三体》启动制作,2021 年真能上映么?
  2. 第01课:什么是微服务?
  3. 这家公司只有 1 个人,年赚一个亿
  4. EXCEL 里面批注都不显示了,只有一个箭头和一个线
  5. Codeforces Round #552 Div. 3
  6. 微软语音合成助手 v1.5+版本,新增火山与阿里接口
  7. 亚马逊五大收款方式对比分析
  8. 如何用css把a标签的下划线去掉
  9. 雨夜DNF辅助从零开始语音教程
  10. java.mod.org,java