被一个问题问愣了: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. 蓝屏代码大全 & 蓝屏全攻略

    转载自http://diybbs.zol.com.cn/15/86_141447.html 一.蓝屏含义 1.故障检查信息 ***STOP 0x0000001E(0xC0000005,0xFDE38A ...

  2. Pandas时间差(Timedelta)

    时间差(Timedelta)是时间上的差异,以不同的单位来表示.例如:日,小时,分钟,秒.它们可以是正值,也可以是负值.可以使用各种参数创建Timedelta对象,如下所示 - 字符串 通过传递字符串 ...

  3. mysql 转移数据目录

    由于MySql的数据库文件和日志文件比较大,导致磁盘空间不够,在添加新的磁盘之后,需要把MySql的数据转移到新挂载的目录下. 1.停止MySql服务: /etc/rc.d/init.d/mysql ...

  4. RabbitMQ C# driver stops receiving messages

    http://stackoverflow.com/questions/12499174/rabbitmq-c-sharp-driver-stops-receiving-messages

  5. jenkins的Master/Slave模式

    一. Master/Slave模式 分担jenkins服务器的压力,任务分配到其它执行机来执行 Master:Jenkins服务器 Slave:执行机(奴隶机).执行Master分配的任务,并返回任务 ...

  6. 四十二 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mget和bulk批量操作

    注意:前面讲到的各种操作都是一次http请求操作一条数据,如果想要操作多条数据就会产生多次请求,所以就有了mget和bulk批量操作,mget和bulk批量操作是一次请求可以操作多条数据 1.mget ...

  7. 同步容器类ConcurrentHashMap及CopyOnWriteArrayList

    ConcurrentHashMap Java5在java.util.concurrent包中提供了多种并发容器类来改进同步容器的性能.其中应用最为广泛的为ConcurrentHashMap,Concu ...

  8. 神经网络训练时出现nan错误

    现在一直在用TensorFlow训练CNN和LSTM神经网络,但是训练期间遇到了好多坑,现就遇到的各种坑做一下总结 1.问题一;训练CNN的时候出现nan CNN是我最开始接触的网络,我的研究课题就是 ...

  9. [转载]Java动态填充word文档并上传到服务器

    一. 需求背景 在一些特殊应用场合,客户希望在服务器上生成文档的同时并填充数据,客户端的页面不显示打开文档,但是服务器上生成文档对服务器压力很大,目前服务器上生成文档第一种就是方式是jacob, 但是 ...

  10. Struts12---文件的下载

    01.创建一个下载的页面  (我们的下载是把文件的路径写成固定的) <body> <form action="user/download" method=&quo ...