被一个问题问愣了: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. centos上mailx通过465端口发送邮件

    最近在看zabbix发送邮件的时候,发现自己的邮件总是无法发送,这里可能是外网防火墙禁止25端口,那么如何绕过25端口呢?  我使用的是163邮箱的TSL加密协议465端口 由于mailx基本配置很简 ...

  2. SpringMVC的HelloWorld快速入门!

    1.加入JAR包: commons-logging-1.1.3.jar spring-aop-4.0.0.RELEASE.jar spring-beans-4.0.0.RELEASE.jar spri ...

  3. CocoaPods学习系列2——使自己的项目支持CocoaPods管理

    该篇记录使自己的项目支持CocoaPods管理. 要达到这一目的,需要如下步骤: 1.将自己的项目提交到github,添加开源协议license 2.添加podspec文件 3.验证podspec,成 ...

  4. ZC_RemoteThread

    1.Z_WinMain.cpp #include <windows.h> #include "resource.h" #include "Z_RemoteFu ...

  5. TUNING FOR ALL FLASH DEPLOYMENTS

    Ceph Tuning and Best Practices for All Flash Intel® Xeon® ServersLast updated: January 2017 TABLE OF ...

  6. Android获取所有应用的资源id和对应的uri

    背景 在某些应用中,为了实现应用apk资源放入重复利用,或者使用反射得到本应用的资源,需要使用反射方式获得,但Resources类中也自带了这种获取方式,并且功能更加强大 你可以获取string,co ...

  7. mysql create database and user 新建数据库并为其创建专用账号

    DROP DATABASE `wordpress`;------------------------------------------------------------------ CREATE ...

  8. const对象 不能调用非const修饰的成员函数

    class class UIRect:public RECT { public: UIRect(LONG leftT = 0, LONG topT = 0, LONG rightT = 0, LONG ...

  9. 百度之星2017初赛A-1005-今夕何夕

    今夕何夕 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  10. Qt类型转换

    (转自:http://qimo601.iteye.com/blog/1260479) 1.char * 与 const char *的转换 char *ch1="hello11"; ...