当前位置: 首页 > news >正文

IO(Reader/Writer)

1.Reader

a.简介

        i.是Java的IO库提供的另一种输入流。和InputStream的区别是:InputStream是字节流,以byte为单位,Reader是字符流,以char为单位。

        ii.java.io.Reader是所有字符输入流的超类。

b.FileReader

        i.FileReader默认的编码与系统相关,创建时需要指定编码,Windows系统的默认编码可能是GBK,打开一个UTF-8编码的文本文件出现乱码。
        ii.int read(char[] c)一次性读取若干字符并填充到char[]数组,返回实际读入的字符个数,最大不超过char[]数组的长度,返回-1表示流结束。

c.CharArrayReader

        i.可以在内存中模拟一个Reader,实际作用是把char[]数组变成一个Reader。

d.StringReader

        i.可以直接把String作为数据源,和CharArrayReader几乎一样。

e.InputStreamReader

        i.除了特殊的CharArrayReader和StringReader,普通的Reader实际上是基于InputStream构造的,因为Reader需要从InputStream中读取字节流(byte),然后根据编码设置,再转换成char就可以实现字符流。
        ii.Reader本质上是一个基于InputStream的byte到char的转换器,InputStreamReader转换器可以把任何InputStream转换成Reader。

2.Writer

a.简介

        i.带编码转换器的OutputStream,把char转换成byte并输出。

        ii.java.io.Writer是所有字符输出流的超类。

b.FileWriter

        i.向文件中写入字符流的Writer。

c.CharArrayWriter

        i.在内存中创建一个Writer,实际上是构造一个缓冲区,可以写入char,最后得到写入的char[]。

d.StringWriter

        i.也是一个基于内存的Writer,和CharArrayWriter类似。实际上,内部维护了一个StringBuffer,并对外提供了Writer接口。

e.OutputStreamWriter

        i.除了特殊的CharArrayWriter和StringWriter,普通的Writer实际上是基于OutputStream构造的,接收char,然后在内部自动转换成byte,并写入OutputStream。
        ii.Writer本质上是一个基于OutputStream的char到byte的转换器,OutputStreamWriter转换器可以把任何OutputStream转换成Writer。

3.PrintStream和PrintWriter

a.PrintStream

        i.是一种FilterOutputStream,提供写入各种数据类型的方法。
        ii.System.out:系统默认提供的标准输出流。System.err:系统默认提供的标准错误输出流。
        iii.可以打印各种数据类型,不会抛出IOException,编写代码时,不需要捕捉IOException。

b.PrintWriter

        i.PrintStream最终输出的总是byte数据,而PrintWrite则是扩展了Writer接口,它的print()/println()最终输出的是char数据。

4.Files

        a.读写小文件的工具类,读取大文件仍然要使用文件流。
        b.Files是java.nio包里的,封装了很多读写方法。

相关文章:

  • C#的Socket编程细节
  • 每日一练:从前序遍历与中序遍历序列构造二叉树
  • 这是一个悲惨的故事
  • (十七)、Mac 安装k8s
  • Miniforge详细安装教程(macOs和Windows)
  • mongoDB快速上手
  • vue按钮接收键盘回车事件
  • 云栖3天,云原生+ AI 多场联动,新产品、新体验、新探索
  • 卸载apt-get 安装的PostgreSQL版本
  • HTML5+JavaScript绘制闪烁的网格错觉
  • 基于php的酒店管理系
  • 【Python】数据可视化之点线图
  • 后端人需知
  • Spring Boot 进阶- Spring Boot 自定义拦截器详解
  • Go版数据结构 -【4.2 二叉搜索树】
  • [译]如何构建服务器端web组件,为何要构建?
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • Angular4 模板式表单用法以及验证
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • Cookie 在前端中的实践
  • CSS居中完全指南——构建CSS居中决策树
  • ES6系统学习----从Apollo Client看解构赋值
  • LintCode 31. partitionArray 数组划分
  • PHP 的 SAPI 是个什么东西
  • Sass 快速入门教程
  • windows下mongoDB的环境配置
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 软件开发学习的5大技巧,你知道吗?
  • 深入浅出Node.js
  • 说说动画卡顿的解决方案
  • 我这样减少了26.5M Java内存!
  • 在Unity中实现一个简单的消息管理器
  • k8s使用glusterfs实现动态持久化存储
  • # wps必须要登录激活才能使用吗?
  • #C++ 智能指针 std::unique_ptr 、std::shared_ptr 和 std::weak_ptr
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (+4)2.2UML建模图
  • (12)Linux 常见的三种进程状态
  • (C语言)字符分类函数
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (阿里云万网)-域名注册购买实名流程
  • (笔试题)合法字符串
  • (二)WCF的Binding模型
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (回溯) LeetCode 78. 子集
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转载)PyTorch代码规范最佳实践和样式指南
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)