关于IO流的抽象类
被一个问题问愣了: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流的抽象类的更多相关文章
- 理解Java之IO流
流是一种抽象概念,它代表了数据的无结构化传递.用来进行输入输出操作的流就称为IO流. 一.IO流结构 1.流的分类方式 按流向分: 从文件/网络/内存等(数据源)到程序是输入流:从程序到文件/网络/内 ...
- Java基础之IO流
很长时间都没有更新了,最近在补充JavaSE的一些细节部分 关于IO流的一些总结 首先要介绍的是File类,File类用于对文件和目录的一些操作 1.创建文件CreateNewFile() 2.对文件 ...
- Java中IO流,输入输出流概述与总结
总结的很粗糙,以后时间富裕了好好修改一下. 1:Java语言定义了许多类专门负责各种方式的输入或者输出,这些类都被放在java.io包中.其中, 所有输入流类都是抽象类InputStream(字节输入 ...
- Java:IO流与文件基础
Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...
- java IO流详解
流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
- IO流总结
IO流的作用:用于设备和设备之间的数据传输. IO流的概念:流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象. IO流的分类: 按照操作数据的类型分为两种: 字节流和字符流. 按 ...
- IO流
流的概念和作用 学习JavaIO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特 ...
- Java IO流学习总结
Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
- Java基础系列——IO流
---恢复内容开始--- Java对数据的操作都是通过流的方式,数据的输入和输出是相对内存来说的,将外设的数据读到内存:输入流:将内存的数据写到外设:输出流. 流按操作数据分为两种:字节流,字符流. ...
随机推荐
- PHP练习题一
目录:1.如何使用php导入导出csv?2.php接收POST数据的方式有哪些?3.如何让json_encode()不转义斜杠?我在做服务器返回一些数据时需要返回一些地址,但是默认的json_code ...
- 关于C/C++中main函数参数的学习
因为面对对象作业(2018.5.21)的要求,去学习了C/C++中main函数参数的意义,以及一些简单的使用(从命令行指令的接受),不给予赘述.(仅为个人拙见,还望看官指正) 首先,带有参数的main ...
- tomcat配置访问图片路径映射到磁盘路径
首先,我在调试页面的时候发现,图片路径为: /webapps/pic_son/img/1234565456.jpg 但是,tomcat中webapps的文件夹下的pic_son项目中,img文件夹是空 ...
- 不常用的gcd公式
gcd(a^m-b^m,a^n-b^n)=a^(gcd(m,n))-b^(gcd(m,n))
- RabbitMQ 之 WorkQueues工作队列
模型图 为什么会出现 work queues? 前提:使用 simple 队列的时候 (上一篇博客)我们应用程序在是使用消息系统的时候,一般生产者 P 生产消息是毫不费力的(发送消息即可),而消费者接 ...
- js 格式化时间日期函数小结3
function DateUtil(){}/***功能:格式化时间*示例:DateUtil.Format("yyyy/MM/dd","Thu Nov 9 20:30:37 ...
- spring3: 4.4 使用路径通配符加载Resource
4.4.1 使用路径通配符加载Resource 前面介绍的资源路径都是非常简单的一个路径匹配一个资源,Spring还提供了一种更强大的Ant模式通配符匹配,从能一个路径匹配一批资源. Ant路径通配 ...
- C# 语言版本
(摘自:维基百科)https://en.wikipedia.org/wiki/C_Sharp_(programming_language) Versions Version Language spec ...
- Android界面View及ViewGroup学习 《转载》
View及ViewGroup类关系 Android View和ViewGroup从组成架构上看,似乎ViewGroup在View之上,View需要继承ViewGroup,但实际上不是这样的. View ...
- padding和margin的用法
在CSS中margin是指从自身边框到另一个容器边框之间的距离,就是容器外距离.在CSS中padding是指自身边框到自身内部另一个容器边框之间的距离,就是容器内距离. 一.padding 1.语法结 ...