- 浏览: 13792 次
- 性别:
- 来自: 北京
最新评论
java 输入流和输出流概述
2010年12月07日
程序的主要任务是操纵数据。在运行时,这些数据都必须位于内存中,并且属于特定的类型,程序才能操纵它们。在java中,把一组有序的数据序列称为流。根据操作的类型,可以把流分为输入流和输出流2种。程序从输入流读取数据,向输出流写出数据。见下图
Java I/O系统负责处理程序的输入和输出,I/O类库位于java.io包中,它对各种常见的输入流和输出流进行了抽象。如果数据流中最小的数据单元是字节,那么称这种流为字节流;如果数据流中最小的数据单元是字符,那么称这种流为字符流。在I/O类库中, java.io.InputStream 和 java.io.OutputStream 分别表示字节输入流和字节输出流,java.io.Reader 和 java.io.Writer分别表示字符输入流和字符输出流。我们有的时候把InputStream 和 OutputStream 直接称为输入流和输出流,而对于 Reader 和 Writer,则直接使用它们的英文类名。
从JDK1.4版本开始引入了新I/O类库,它位于java.nio包中,新I/O类库利用通道和缓冲区等来提高I/O操作的效率。
在java.io包中, java.io.InputStream 表示字节输入流, java.io.OutputStream表示字节输出流,它们都是抽象类,不能被实例化。InputStream 类提供了一系列和读取数据有关的方法。
(1) int read() : 从输入流读取数据,有如下3中重载形式。
int read() :从输入流读取一个8位的字节,把它转换为 0~255之间的整数,并返回这一整数。例如,如果读到9, 则返回9, 如果读到的字节为-9,则返回 247,。如果遇到输入流的结尾则返回-1.
int read(byte[] b):从输入流读取若干个字节,把它们保存到参数b指定的字节数组中。返回的整数表示读取的字节数。如果遇到输入流结尾,则返回-1.
int read(byte[] b, int off, int len):从输入流读取若干个字节,把它们保存到参数b指定的直接数组中。参数off指定在字节数组中开始保存数据的起始下标,参数len指定读取的字节数目。返回的整数表示实际读取的字节数。如果遇到输入流的结尾,则返回-1。
以上第一个read方法从输入流读取一个字节,而其余两个read方法从输入流批量读取若干字节。在从文件或键盘读数据时,采用后面两个read可以减少进行物理读文件或键盘的次数,因此提高I/O操作的效率。
(2) void close() : 关闭输入流。当完成所有的读操作后,应该关闭输入流。InputStream 类本身的close()方法不执行任何的操作。它的一些子类覆盖了close()方法,在close()方法中释放和流有关的系统资源。
(3) int available():返回可以从输入流中读取的字节数目。
(4) skip(long n): 从输入流中跳过参数n指定的直接数目。
(5) boolean markSupported(), void mark(int readLimit),void reset(): 如果要从流中重复读入数据,可以通过以下方式实现。先用markSupported()方法判断这个流是否支持重复读取数据,如果返回true,则表明可以在流上设置标记。接下来调用 mark(int readLimit)方法从流的当前位置开始设置标记, readLimit 参数指定在流上做了标记的字节数。然后用read()方法读取在标记范围内的字节。最后调用reset()方法,该方法使输入流重新定位到刚才做了标记的起始位置。这样就可以重复读取做过标记的数据了。
java.io.Stream 类提供了一系列与写数据有关的方法。
(1) void write(int b) :像输出流写入数据,有如下3中重载形式。
void write(b) : 向输出流写入一个字节。
void write(byte[] b): 把参数b指定的字节数组中的所有字节写到输出流。
void write(byte[] int off, int len):把参数b指定的字节数组中的若干字节写到输出流中,参数off指定直接数组的起始下标,从这个位置开始输出由参数len指定数目的字节。
以上第一个write方法 向输出流写入一个字节,而其余两个Write方法向输出流批量写入若干字节。在向文件或控制台写数据时,采用后面两个write 方法可以减少进行物理写文件或控制台的次数,因此可以提高I/O操作的效率。
(2) void close();:关闭输入流。当完成所有的写操作后,应该关闭输入流。OutputStream类本身的close()方法 不执行任何操作。它的一些子类覆盖了close()方法,释放和流有关的系统资源。
(3) void flush():OutputStream 类本身 的flush()方法不执行任何操作,它的一些带有缓冲区的子类(比如BufferOutStream 和 PrintStream类)覆盖了 flush()方法。通过带有缓冲区的输出流写数据时,数据线保存在缓冲区,积累到一定程序才会真正写到输出流中。缓冲区通常用字节数组实现,实际上是指一块内存空间。flush()方法强制把缓冲区的数据写到输出流中。
可以把程序向输出流写数据比作从北京运送烤鸭到上海。如果没有缓冲区,那么没执行一次write(int b)方法,仅仅把一只烤鸭从北京运到上海,如果有一万只烤鸭,就必须运送一万次,这样的运送效率显然很低。为了减少运送次数,可以先把一批烤鸭装在卡车的车厢中,这样就能成批地运送烤鸭,卡车的车厢就是缓冲区。在默认情况下,只有当车厢装满烤鸭后,才会把这批烤鸭运送到上海,而flush()方法表示不管车厢是否装满,都立即执行一次运货操作。
为了保证输入流或输出流被及时关闭,最好把关闭流的操作放在finally 代码块中。I/O操作通常采用以下程序流程: InputStream in; OutputStream out; try{ //处理输入流 //处理输出流 }catch(IOException e){ //处理IO异常 }finally{ in.close(); out.close(); } InputStream in; OutputStream out; try{ //处理输入流 //处理输出流 }catch(IOException e){ //处理IO异常 }finally{ in.close(); out.close(); }
发表评论
-
istream类方法 重载的抽取操作符和 cin输入
2012-01-20 00:12 1053istream类方法 重载的抽 ... -
Windows钩子编程1
2012-01-20 00:12 654Windows钩子编程1 2010年12月29日 一、什 ... -
c语言的文件处理
2012-01-20 00:12 1009c语言的文件处理 2010年06月03日 本章要点: ... -
Linux下文件I/O操作详解
2012-01-20 00:12 684Linux下文件I/O操作详解 2010年12月26日 ... -
PHOTOSHOP初学者成长教材
2012-01-19 01:04 607PHOTOSHOP初学者成长教材 ... -
Photoshop初学者必读十课
2012-01-19 01:04 528Photoshop初学者必读十课 2010年06月15日 ... -
诺基亚5800操作
2012-01-19 01:03 582诺基亚5800操作 2011年06月30日 鉴于5800 ... -
2011-3-26
2012-01-19 01:03 5142011-3-26 2011年03月26日 ... -
2011-9-17
2012-01-19 01:03 5142011-9-17 2011年09月17日 ... -
BMP图片结构(一)
2012-01-17 00:26 1079BMP图片结构(一) 2011年05月03日 BMP图 ... -
bmp图片格式
2012-01-17 00:26 646bmp图片格式 2010年11月18日 BMP是一种与硬 ... -
BMP文件格式及数据提取
2012-01-17 00:26 1073BMP文件格式及数据提取 2011年05月10日 为了给 ... -
BMP文件结构(二)
2012-01-17 00:26 755BMP文件结构(二) 2011年05 ... -
BMP图片是什么格式?
2012-01-17 00:26 874BMP图片是什么格式? 2011 ... -
大全【极有收藏价值的】
2012-01-16 13:52 506大全【极有收藏价值的 ... -
提高小学作文实效性的思考
2012-01-16 13:52 535提高小学作文实效性的思考 2010年11月17日 摘要: ... -
小学生评语大全
2012-01-16 13:51 594小学生评语大全 2011年07月14日 你是一位可爱的小 ... -
小学生期末评语经典大全
2012-01-16 13:51 289小学生期末评语经典大全 2011年12月15日 1.你是 ... -
超级爆笑小学生作文大全,这孩子太搞了
2012-01-16 13:51 472超级爆笑小学生作文大全,这孩子太搞了 2011年11月03日 ...
相关推荐
计算机编程语言概述 JAVA的一些基本概念还有变成规则
完整版 Java基础入门教程 Java程序语言设计 04 IO流 输入输出流(共31页).ppt 完整版 Java基础入门教程 Java程序语言设计 05 GUI AWT 事件模型(共27页).ppt 完整版 Java基础入门教程 Java程序语言设计 05 GUI GUI...
本文档主要讲述的是JAVA数据流的概述;输入输出是指应用程序与...Java语言的输入输出数据是以流的形式出现的,并且Java提供了大量的类来对流进行操作,从而实现了输入输出功能。希望本文档会给有需要的朋友带来帮助;
java数据流概述和java。io包,文件输入输出
完整版精品java课件 Java基础入门教程 Java程序设计 第9章 输入输出流(共49页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第10章 JDBC数据库编程(共21页).ppt 完整版精品java课件 Java基础入门教程...
完整版 Java基础入门教程 Java程序语言设计 04 IO流 输入输出流(共31页).ppt 完整版 Java基础入门教程 Java程序语言设计 05 GUI AWT 事件模型(共27页).ppt 完整版 Java基础入门教程 Java程序语言设计 05 GUI GUI...
完整版精品java课件 Java基础入门教程 Java程序设计 第9章 输入输出流(共49页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第10章 JDBC数据库编程(共21页).ppt 完整版精品java课件 Java基础入门教程...
javax.imageio.spi 包含用于 reader、writer、transcoder 和流的插件接口以及一个运行时注册表的 Java Image I/O API 包。 javax.imageio.stream Java Image I/O API 的一个包,用来处理从文件和流中产生的低级别 I...
javaOOP必看精华视频资料,1:主要介绍IO流中的递归 2:文件输出导出数据与文件输入导入数据的构造方法 3:递归求阶乘代码实现及内存讲解 4:不死神兔问题案例 5:IO流基类概述及一个简单的需求分析 6:...
完整版 Java基础入门教程 Java程序语言设计 04 IO流 输入输出流(共31页).ppt 完整版 Java基础入门教程 Java程序语言设计 05 GUI AWT 事件模型(共27页).ppt 完整版 Java基础入门教程 Java程序语言设计 05 GUI GUI...
完整版精品java课件 Java基础入门教程 Java程序设计 第9章 输入输出流(共49页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第10章 JDBC数据库编程(共21页).ppt 完整版精品java课件 Java基础入门教程...
完整版 Java基础入门教程 Java程序语言设计 04 IO流 输入输出流(共31页).ppt 完整版 Java基础入门教程 Java程序语言设计 05 GUI AWT 事件模型(共27页).ppt 完整版 Java基础入门教程 Java程序语言设计 05 GUI GUI...
完整版精品java课件 Java基础入门教程 Java程序设计 第9章 输入输出流(共49页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第10章 JDBC数据库编程(共21页).ppt 完整版精品java课件 Java基础入门教程...
本书共12章,从程序设计方法讲起,详细介绍了Java开发环境、语法知识、数组、类、对象、继承、接口等面向对象程序设计和开发的知识及应用,同时包括异常处理、输入输出方法、图形图像、多媒体、Applet等方面的内容。...
完整版精品java课件 Java基础入门教程 Java程序设计 第9章 输入输出流(共49页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第10章 JDBC数据库编程(共21页).ppt 完整版精品java课件 Java基础入门教程...
8.1 输入输出概述 8.2 各种输入输出流 8.3 文件随机存取: RandomAccessFile类 第9章 多线程与Applet 9.1.1 线程的概念 9.1.2 线程的控制 9.1.3 线程的创建 9.1.4 线程间通信 第10章 网络编程 10.1 计算机网络基础...
javax.imageio.spi 包含用于 reader、writer、transcoder 和流的插件接口以及一个运行时注册表的 Java Image I/O API 包。 javax.imageio.stream Java Image I/O API 的一个包,用来处理从文件和流中产生的低级别 I/...
完整版 Java基础入门教程 Java程序语言设计 04 IO流 输入输出流(共31页).ppt 完整版 Java基础入门教程 Java程序语言设计 05 GUI AWT 事件模型(共27页).ppt 完整版 Java基础入门教程 Java程序语言设计 05 GUI GUI...
完整版 Java基础入门教程 Java程序语言设计 04 IO流 输入输出流(共31页).ppt 完整版 Java基础入门教程 Java程序语言设计 05 GUI AWT 事件模型(共27页).ppt 完整版 Java基础入门教程 Java程序语言设计 05 GUI GUI...