在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();
}
分享到:
相关推荐
### Java输入输出流详解 #### 一、Java IO 概述 在计算机程序设计中,输入输出(Input/Output,简称IO)是非常重要的一个概念。它涉及到程序如何与外部世界进行数据交换,最常见的外部设备包括磁盘存储和网络通信等...
流可以分为四类:字节流(Byte Stream)和字符流(Character Stream),以及输入流(Input Stream)和输出流(Output Stream)。字节流处理单个字节的数据,而字符流处理Unicode字符,如UTF-8编码。 1. 字节流 - ...
计算机编程语言概述 JAVA的一些基本概念还有变成规则
在Java中,输入输出流是进行文件读写操作的基础,通过理解和掌握`java.io`包中的类体系结构,开发者可以更加灵活地处理各种文件操作。无论是简单的文件读写还是复杂的网络通信,都能够基于这些基础构建出高效的应用...
在Java.io包中,这两类流都提供了输入流和输出流接口,用于读取和写入数据。 1. 字节流:InputStream和OutputStream是字节输入流和输出流的基类,用于处理字节数据。例如,FileInputStream和FileOutputStream分别...
- `BufferedReader`是一个高效的缓冲字符输入流,它可以对字符输入流进行包装,并提供读取单个字符、读取字符串以及判断是否到达流末尾等功能。 - 创建`BufferedReader`实例时,通常会将`InputStreamReader`作为参数...
#### 二、Java输入输出流概述 Java IO库主要包含在`java.io`包中,它提供了一系列用于处理输入输出操作的类和接口。这些类和接口可以被分为两大类:字节流和字符流。字节流适用于处理二进制数据,如图片、音频文件等...
### Java的输入输出流概述 #### 一、引言 Java 的输入输出(I/O)功能强大且灵活,为开发者提供了处理各种数据源的能力。I/O 操作涉及到的数据源包括但不限于文件、内存、网络连接等。尽管 I/O 操作强大,但其复杂...
I/O流是Java对输入输出数据流的一种抽象,分为输入流(Input Stream)和输出流(Output Stream)。输入流是从数据源读取数据,输出流则是向目标写入数据。流可以双向流动,例如,文件既可以作为输入流读取数据,也...
### Java 输入输出流详解 #### 一、I/O流概述 在Java中,输入输出流是处理文件读写、网络通信等数据...以上是关于Java输入输出流的一些基础概念和使用方法的详细介绍,希望对你理解和应用Java输入输出流有所帮助。
流的方向性分为输入流(读取数据)和输出流(写入数据)。 2. **Java的输入/输出流与文件操作概述**: - **流类**:Java提供了多种流类,如`InputStream`和`OutputStream`作为字节输入和输出流的抽象基类,`Reader...
完整版 Java基础入门教程 Java程序语言设计 04 IO流 输入输出流(共31页).ppt 完整版 Java基础入门教程 Java程序语言设计 05 GUI AWT 事件模型(共27页).ppt 完整版 Java基础入门教程 Java程序语言设计 05 GUI GUI...
本次实验的主要目的是让学习者掌握字符输入流和输出流的基本用法,了解如何利用这些流来实现文件的读写操作,并能够将读取的文本数据以一种友好的形式展示给用户。 #### 五、实验步骤与代码示例 根据实验描述,我们...
#### 二、Java输入输出流概述 Java中的输入输出流是一种用于处理数据读取和写入的技术。当程序需要从外部获取数据时,会创建一个指向数据源的流;反之,当程序需要将数据发送到外部时,则会创建一个指向目标的流。...
在Java中,流通常分为输入流(Input Stream)和输出流(Output Stream)。输入流用于从源获取数据,而输出流则是将数据传输到目的地。值得注意的是,这个分类并不是固定不变的,例如,文件在写入数据时是输出流,而...
流可以分为输入流(Input Stream)和输出流(Output Stream),但并非所有流只能单向传输。例如,文件既可以作为输入流用于读取数据,也可以作为输出流用于写入数据。 在Java中,标准数据流是预先定义好的,方便...
- **1.1 什么是流**:流是一种连续的数据序列,Java中的流可以是输入流或输出流。 - **1.2 数字数据处理**:Java提供了多种处理数字数据的方法,包括`int`、`float`等类型的读写操作。 - **1.3 字符数据处理**:通过...
数据流分为两类:输入流和输出流。输入流允许程序接收来自外部的数据,例如从硬盘读取文件或从网络接收数据,而输出流则用于将数据发送到外部,如写入文件或向显示器显示信息。Java 中的 I/O 功能主要包含在 `java....
- **字节流**:InputStream 和 OutputStream 是所有字节输入流和输出流的抽象基类,它们处理单字节数据。常见的子类有 FileInputStream 和 FileOutputStream,分别用于读写文件。 - **字符流**:Reader 和 Writer ...