【Java学习笔记】I/O
2016-02-19 18:54
399 查看
-----------------------------------------------个人初学,如有错误,欢迎指正-----------------------------------------------
Java I/O初学笔记
先来看一张I/O的体系图吧:
![](https://img-blog.csdn.net/20160219162207881?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
一、简介
I/O简而言之就是各种媒介之间进行数据交换。本文主要介绍Java中常用的输入输出流。Java的I/O包中Stream类根据操作的对象分为字符流和字节流。
二、分类
Java的I/O操作,主要可以分为下面四类:
1、字符流:Reader(读),Writer(写);参见上图右半部分
2、字节流:InputStream(输入流),OutputStream(输出流);参见上图左半部分
3、盘符:File(文件类)
4、网络:Socket(位于java.net包下,不在java.io里)
三、详细介绍
3.1字符流
Reader和Writer都是抽象类,具体的读写操作可以使用已经实现的FileReader和FileWriter两个子类。还有两个已经实现的带缓冲区的子类BufferedReader和BufferedWriter,我们来看看官方API是怎么介绍的:
![](https://img-blog.csdn.net/20160219172545448?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
公共类BufferedReader继承自Reader。
从字符输入流中读取文本信息,字符缓冲区用来高效读取字符,数组,行。缓冲区的大小可能被设定,或者默认的大小可供使用。缓冲区的默认大小足够大部分情况使用了。
一般的,每次读请求都会在底层生成相应的字符或字节流读请求对象,因此,对于用FileReaders和InputStreamReaders等消耗较高的操作,使用其他Reader对象包裹BufferedReder是很明智的。
![](https://img-blog.csdn.net/20160219173039484)
公共类BufferedWriter继承自Writer
从字符输出流中写入文本信息,字符缓冲区用来高效写入字符,数组,行。缓冲区的大小可能被设定,或者默认的大小可供使用。缓冲区的默认大小足够大部分情况使用了。
newLine()方法是根据所运行的平台自身定义的行终止符来定义的一行的终止,并不是所有的平台都使用“\n”来作为一行的结束。因此使用newLine()来结束一行的输出,要比直接使用“\n”好。
一般的,除非有输出提示,writer对象会立即输出基本字符或字节。对于用FileWriters和OutputStreamWriters等消耗较高的操作,使用其他Reader对象包裹BufferedWriter是很明智的。
通过API我们可以很直接的了解到,FileReader和FileWriter配合BufferedReder和BufferedWriter效率会更高。
3.2字节流
InputStream和OutputStream是字节流的两个父类,也都是抽象类。同字符流一样,字节流也提供了两个常用的以实现的子类FileInputStream和FilieOutputStream来读取文件。我们查看API的介绍:
![](https://img-blog.csdn.net/20160219175500334)
公共类FileInputStream继承自InputStream
FileInputStream对象从系统的一个文件中获取字节到另一个文件。文件是否可用,取决于系统的环境。
FileInputStream主要用来读取字节流,比如图片数据。如果要读取字符,可以考虑使用FileReader。
![](https://img-blog.csdn.net/20160219175548850)
公共类FileOutputStream继承自OutputStream
文件输出流是写入数据到文件或者文件说明符中的一种输出流。无论一个文件是否可用或者可能被创建则取决于运行的平台。特别的,一些平台在一定时间内只允许一个FileOutputStream对象(或其它文件写入对象)打开一个文件以供写入。在这种情况下,如果一个文件已经被打开,那么FileOutputStream类的构造函数将会失败。
FileOutputStream主要用来写入字节流,比如图片数据。如果要写入字符,可以考虑使用FileWriterr。
字节流的两个子类都有提示,如果要读写字符数据,建议使用字符流。这是因为一个字符占两个字节,如果是文本文档,那么使用字节流,读写两次才可以读完一个汉字,但是字符流一次就可以读写一个字符,加上字符流可以配合BufferedReder和BufferedWriter使用,所以效率会比字节流高很多。同样的,图片和视频等数据是以二进制字节存储的,所以使用字节流读写图片等数据会更方便。
四、小结
字节流以字节为单位读取数据,字符流以字符为单位读取数据。Java的I/O主要有两个超类:inputstream和outputstream字节流类,以及Reader和Writer字符流类。
字节流和字符流之间通过 InputStreamReader和OutputStreamWriter来转换,也就是通过byte数组(字节)和String(字符)来关联,也可以理解为字节和字符之间转换。
今天主要都是理论部分,明天补充代码实例。文章如有错误,欢迎指正。
Java I/O初学笔记
先来看一张I/O的体系图吧:
一、简介
I/O简而言之就是各种媒介之间进行数据交换。本文主要介绍Java中常用的输入输出流。Java的I/O包中Stream类根据操作的对象分为字符流和字节流。
二、分类
Java的I/O操作,主要可以分为下面四类:
1、字符流:Reader(读),Writer(写);参见上图右半部分
2、字节流:InputStream(输入流),OutputStream(输出流);参见上图左半部分
3、盘符:File(文件类)
4、网络:Socket(位于java.net包下,不在java.io里)
三、详细介绍
3.1字符流
Reader和Writer都是抽象类,具体的读写操作可以使用已经实现的FileReader和FileWriter两个子类。还有两个已经实现的带缓冲区的子类BufferedReader和BufferedWriter,我们来看看官方API是怎么介绍的:
公共类BufferedReader继承自Reader。
从字符输入流中读取文本信息,字符缓冲区用来高效读取字符,数组,行。缓冲区的大小可能被设定,或者默认的大小可供使用。缓冲区的默认大小足够大部分情况使用了。
一般的,每次读请求都会在底层生成相应的字符或字节流读请求对象,因此,对于用FileReaders和InputStreamReaders等消耗较高的操作,使用其他Reader对象包裹BufferedReder是很明智的。
公共类BufferedWriter继承自Writer
从字符输出流中写入文本信息,字符缓冲区用来高效写入字符,数组,行。缓冲区的大小可能被设定,或者默认的大小可供使用。缓冲区的默认大小足够大部分情况使用了。
newLine()方法是根据所运行的平台自身定义的行终止符来定义的一行的终止,并不是所有的平台都使用“\n”来作为一行的结束。因此使用newLine()来结束一行的输出,要比直接使用“\n”好。
一般的,除非有输出提示,writer对象会立即输出基本字符或字节。对于用FileWriters和OutputStreamWriters等消耗较高的操作,使用其他Reader对象包裹BufferedWriter是很明智的。
通过API我们可以很直接的了解到,FileReader和FileWriter配合BufferedReder和BufferedWriter效率会更高。
3.2字节流
InputStream和OutputStream是字节流的两个父类,也都是抽象类。同字符流一样,字节流也提供了两个常用的以实现的子类FileInputStream和FilieOutputStream来读取文件。我们查看API的介绍:
公共类FileInputStream继承自InputStream
FileInputStream对象从系统的一个文件中获取字节到另一个文件。文件是否可用,取决于系统的环境。
FileInputStream主要用来读取字节流,比如图片数据。如果要读取字符,可以考虑使用FileReader。
公共类FileOutputStream继承自OutputStream
文件输出流是写入数据到文件或者文件说明符中的一种输出流。无论一个文件是否可用或者可能被创建则取决于运行的平台。特别的,一些平台在一定时间内只允许一个FileOutputStream对象(或其它文件写入对象)打开一个文件以供写入。在这种情况下,如果一个文件已经被打开,那么FileOutputStream类的构造函数将会失败。
FileOutputStream主要用来写入字节流,比如图片数据。如果要写入字符,可以考虑使用FileWriterr。
字节流的两个子类都有提示,如果要读写字符数据,建议使用字符流。这是因为一个字符占两个字节,如果是文本文档,那么使用字节流,读写两次才可以读完一个汉字,但是字符流一次就可以读写一个字符,加上字符流可以配合BufferedReder和BufferedWriter使用,所以效率会比字节流高很多。同样的,图片和视频等数据是以二进制字节存储的,所以使用字节流读写图片等数据会更方便。
四、小结
字节流以字节为单位读取数据,字符流以字符为单位读取数据。Java的I/O主要有两个超类:inputstream和outputstream字节流类,以及Reader和Writer字符流类。
字节流和字符流之间通过 InputStreamReader和OutputStreamWriter来转换,也就是通过byte数组(字节)和String(字符)来关联,也可以理解为字节和字符之间转换。
今天主要都是理论部分,明天补充代码实例。文章如有错误,欢迎指正。
相关文章推荐
- Java认证考试实例疑难辨析(10)
- SpringMVC_入门项目
- SpringMVC+shiro+hibernate权限管理整合
- AS导入eclipse项目中文乱码
- javaIO框架小析
- java.lang.NullPointerException 解决
- <关于并发框架>Java原生线程池原理及Guava与之的补充
- Java异常之checked与unchecked
- java解析xml之DOM解析
- eclipse下JVM terminated. Exit code=-1的解决方法
- springmvc
- JAVA反射获取类名,方法名,属性及构造方法
- 用递归实现排列组合(java代码)
- Java synchronized详解
- java web 项目启动的根目录,以及项目启动后使用的端口具体是哪一个
- java的io总结
- 【JAVA】15、数组中元素的表示方法
- 抛异常:Formatter.java:2646
- JAVA设计模式 · 策略模式
- 2、Maven在MyEclipse的集成,并建立一个简单的Maven项目