被一个问题问愣了:java的IO里有哪些抽象类?这个一时半会儿还真记不得,只知道IO有好几类,具体有哪些抽象类从来没有去认真记过。回头仔细看了下分类和继承才发现其实就两对:字节流的抽象类是InputStream和OutputStream,字符流的是Reader和Writer。具体的继承图如下:

  字节流常用的是文件读写操作,用FileInputStream读文件,用FileOutputStream写文件,但往往我们可以通过BufferedInputStream和BufferedOutputStream包装一下,通过缓冲区来避免频繁操作磁盘。ByteArrayInputStream和ByteArrayOutputStream是对字节直接读写。DataInputStream和DataOutputStream可以在读写时直接对基本类型做转换,无需自己转。ObjectInputStream和ObjectOutputStream可以读取、写入对象,前提是该对象需要序列化。

  读写操字节代码作如下:

    public static void dump(InputStream in, OutputStream out) throws IOException {
try (InputStream src = new BufferedInputStream(in); OutputStream dest = new BufferedOutputStream(out)) {
int length;
byte[] data = new byte[1024];
while ((length = src.read(data)) != -1) {
dest.write(data, 0, length);
}
}
}

  字符流操作常用的也是直接读写文件的FileReader和FileWriter。如果文件操作涉及到编码,那么需要用到InputStreamReader和OutputStreamWriter,他们就像一座桥,可以连接到字节流,在实例化它们时可以指定编码类型。BufferedReader和BufferedWriter同样也是起到缓冲的作用,可以提高读写效率。字符串是由字符组成的,所以这里有CharArrayReader和CharArrayWriter来直接操作字符,而StringReader和StringWriter就是操作字符串用的。PrintWriter跟PrintStream一样,都可以操作输出格式,但是PrintStream只能操作字节,而PrintWriter既可以操作字节,也可以操作字符。

  读写操作字符代码如下:

    public static void dump(Reader in, Writer out) throws IOException {
try (Reader src = new BufferedReader(in); Writer dest = new BufferedWriter(out)) {
int length;
char[] data = new char[1024];
while ((length = src.read(data)) != -1) {
dest.write(data, 0, length);
}
}
}

关于IO流的抽象类的更多相关文章

  1. 理解Java之IO流

    流是一种抽象概念,它代表了数据的无结构化传递.用来进行输入输出操作的流就称为IO流. 一.IO流结构 1.流的分类方式 按流向分: 从文件/网络/内存等(数据源)到程序是输入流:从程序到文件/网络/内 ...

  2. Java基础之IO流

    很长时间都没有更新了,最近在补充JavaSE的一些细节部分 关于IO流的一些总结 首先要介绍的是File类,File类用于对文件和目录的一些操作 1.创建文件CreateNewFile() 2.对文件 ...

  3. Java中IO流,输入输出流概述与总结

    总结的很粗糙,以后时间富裕了好好修改一下. 1:Java语言定义了许多类专门负责各种方式的输入或者输出,这些类都被放在java.io包中.其中, 所有输入流类都是抽象类InputStream(字节输入 ...

  4. Java:IO流与文件基础

    Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...

  5. java IO流详解

    流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  6. IO流总结

    IO流的作用:用于设备和设备之间的数据传输. IO流的概念:流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象. IO流的分类:  按照操作数据的类型分为两种: 字节流和字符流.  按 ...

  7. IO流

    流的概念和作用 学习JavaIO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特 ...

  8. Java IO流学习总结

    Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  9. Java基础系列——IO流

    ---恢复内容开始--- Java对数据的操作都是通过流的方式,数据的输入和输出是相对内存来说的,将外设的数据读到内存:输入流:将内存的数据写到外设:输出流. 流按操作数据分为两种:字节流,字符流. ...

随机推荐

  1. sem学习

    关键字的选取搜索引擎营销的关键字选取是非常重要的一步,合适的关键字可以为企业带来可观的咨询量.关键字一般分4种,品牌词,产品词,行业词,竞品词,对于这四类词不同的推广策略有着不同的侧重点,根据市场情况 ...

  2. tyvj 1059 过河 dp

    P1059 过河 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2005 提高组 第二道 描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳 ...

  3. Memcached 连接

    我们可以通过 telnet 命令并指定主机ip和端口来连接 Memcached 服务. 语法 telnet HOST PORT 命令中的 HOST 和 PORT 为运行 Memcached 服务的 I ...

  4. qtjambi_ZC

    loadJambiJniLibrary --> loadLibrary --> loadNativeLibrary --> loadLibrary_helper class QApp ...

  5. 深入浅出TensorFlow(二):TensorFlow解决MNIST问题入门

    2017年2月16日,Google正式对外发布Google TensorFlow 1.0版本,并保证本次的发布版本API接口完全满足生产环境稳定性要求.这是TensorFlow的一个重要里程碑,标志着 ...

  6. hive 导出数据到本地

    有时候需要将hive库中的部分数据导入至本地,这样子做可视化和小规模的数据挖掘实验都是比较方便的.数据导入至本地的HQL语法如下: INSERT OVERWRITE [LOCAL] DIRECTORY ...

  7. Eclipse和MyEclipse的区别

    翻译:日食,月食. eclipse是免费的,myeclipse是收费的. myeclipse是eclipse的插件.

  8. docker安装脚本

    此docker安装脚本为官方提供的,可以从网上下载,此处直接把脚本内容贴上. #!/bin/sh set -e # This script is meant for quick & easy ...

  9. Intellij IDEA 配置Subversion插件实现步骤详解

    在使用Intellij的过程中,突然发现svn不起效了,在VCS–>Checkout from Version Control中也未发现Subversion这一项.如下图:  一.原因查找 经过 ...

  10. TCP粘包处理 参考spserver

    TCP粘包出现的原因就不在详细描述了.TCP粘包是在做TCP编程时经常会遇到的问题,网上相关的参考也不少,大都都是一个热心人士编写的, 若仅用于学习就算了,若用真正用于项目还有待考虑. 本文就简述一下 ...