java数据流操作

上传人:sh****na 文档编号:124908215 上传时间:2020-03-14 格式:PPT 页数:52 大小:185KB
返回 下载 相关 举报
java数据流操作_第1页
第1页 / 共52页
java数据流操作_第2页
第2页 / 共52页
java数据流操作_第3页
第3页 / 共52页
java数据流操作_第4页
第4页 / 共52页
java数据流操作_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《java数据流操作》由会员分享,可在线阅读,更多相关《java数据流操作(52页珍藏版)》请在金锄头文库上搜索。

1、第11章 Java数据流 内容提要 大部分程序都需要数据的输入和输出 从键盘读取数据 向文件写入数据或从文件获取数据 将数据通过打印机打印出来 通过网络进行信息交换 本章介绍Java标准程序库中各种处理I O 操作的类 的用途及使用方法 第1节 输入 输出概念 一 流的概述 Java使用流 stream 来执行输入输出 I O 的功能 流是一种数据的源头和目的之 间的通信途径 用于读入数据称为输入流 input stream 用于写出数据称为输出流 output stream 当使用流时需要使用java io包 因此在涉及数 据流操作的程序中都要先导入java io包 import java

2、io 二 I O类层次结构 Java提供超过60个不同的流类型 这些流 类包含在上面提到的java io包中 四个基本的抽象类 InputStream OutputStream Reader和 Writer 你不能创建这四个类型的对象 但是其他 的方法的返回值可以是他们 事实上 我们经常使用的是 派生自他们的子类 java io包的结构如图11 1 三 标准输入输出 在System类中有三个静态域System in System out和System err 可以在标准位置使用这三个系统流进行I O操作 public static InputStream in 读取字符数据的标准输入流 pub

3、lic static PrintStream out 显示或打印输出信息的标准输出流 public static PrintStream err 输出错误信息的标准错误流 例11 1 标准输入输出 举例 程序运行如下 输入 a b c d 输出 a b c d 输入 Z 注 输入复合键CTRL Z 输出 program end 第2节 文件的顺序访问 一 字节流 字节流是用来读写8位的数据 由于不会对数 据作任何转换 因此可以用来处理二进制的数据 一 OutputStream 二 InputStream 三 FileInputStream和FileOutputStream 四 ByteArra

4、yInputStream和 ByteArrayOutputStream 五 BufferedInputStream和BufferedOutputStream InputStream FileInputStream StringBufferInputStream ByteArrayInputStream SequenceInputStream PipedInputStream FilterInputStream BufferedInputStream LineNumberInputStream DataInputStream PushbackInputStream OutputStream Fi

5、leOutputStream ByteArrayOutputStream PipedOutputStream FilterOutputStream BufferedOutputStream PrintStream DataOutputStream 输入流 输出流的类继承关系 一 OutputStream OutputStream为所有的字节流输出流的父类 因此所有源自于它的类也会继承下列的方法 void write int b 写入一个字节的数据 void write byte buttfer 讲数组buffer的数据 写入流 void write byte int offset int le

6、n 从 buffer offset 开始 写入len个字节的数据 void flush 强制将buffer内的数据写入流 void close 关闭流 二 InputStream InputStream为所有的字节输入流的父类 因此 所有源于它的类也会继承下列的方法 int read 读入一个字节的数据 如果已达到文 件的末端 返回值为 1 int read byte buffer 读出buffer大小的数据 返回值为实际所读出的字节 int read byte buffer int offset int len 将读出 的数据从buffer offset 开始 写入len个字节 至buffe

7、r中 返回值为实际所读出的字节数 目 int available 返回流内可供读取的字节数目 long skip long n 跳过n个字节的数据 返回值 为实际所跳过的数据数 void close 关闭流 三 FileInputStream和FileOutputStream FileInputStream用来读取一个文件 FileOutPutStream 用来将数据写入文件 常用的构造函数如下 FileInputStream String name 打开文件name用来读取 数据 FileInputStream File file 打开文件file用来读取数据 FileOutputStrea

8、m String name 打开文件name用来写 入数据 FileOutputStream File file 打开文件file用来写入数据 FileOutputStream String name Boolean append 打开 文件name用来写入数据 若append为true 则写入的 数据会加到原有文件后面 否则 覆盖原有的文件 将FileExam java复制为 FileExam java bak 程序首先打开FileExam java文件 使用read 将其内容逐字节读取出来 如果返 回值为 1 则表明已到达文件尾端 再使用write 将读出的字节逐一写入另一个 文件File

9、Exam java bak中 若文件无法打开 例如FileExam java不存在 或无法生成 FileExam java bak 会抛 出FileNotFoundException异常 若读写出错 则会抛出IOException异常 最后 我们在finally中关闭文件 例11 2 FileIO jav a 四 ByteArrayInputStream和 ByteArrayOutputStream 使用这两个流类可以将数据转换到一个数据类型为字 节类型的数组 byte array 中 ByteArrayInputStream和ByteArrayOutputStream并 没有牵涉到真正的文件

10、 他们使用内存 一个流缓冲 区 作为I O流的源头及目的 ByteArrayInputStream用来从一个流缓冲区 字节数 组 中读入数据 ByteArrayOutputStream用来将数据转换至一个流缓 冲区中 由于流对象的内容存放在内存中 所以可提供较快的 操作 常用的构造函数如下 ByteArrayInputStream byte buffer 生成一个字节数组的 输入流 并指定一个字节数组buffer为此输入流的流缓冲 区 ByteArrayOutputStream 生成一个字节数组的输出流 其缓冲区的默认初始大小为32字节 若有需要 缓冲区的 大小会随之增加 ByteArrayO

11、utputStream int size 同上 但分配size字节的 初始大小给此缓冲区 ByteArrayOutputStream的一些常用方法 int size 返回此流缓冲区的大小 byte toByteArray 生成一个新的字节数组 并将流的 内容复制到此字节数组 String toString 将流的内容转换为String对象 下面程序读入文件data in 将其内容写入内存中 一个字节数 组 接着转换为String对象 并将该String对象内的令 牌解析出来 例11 3 ByteIO java 若输入数据 data in中的数据 如下 Aa 00001 92 69 95 Bb

12、00002 77 92 96 则程序输出如下 Aa 00001 92 69 95 Bb 00002 77 92 96 五 BufferedInputStream和 BufferedOutputStream 有时候我们在处理来自输入流的数据时 希望能够 重设流并回到较靠前的位置 这需要使用缓冲来实现 通过使用 BufferedInputStream类 可以利用mark和reset 方法在缓冲的输入流中往回移动 同时 通过使用BufferedOutputStream类 可以先 将输出写到内存缓冲区 再使用flush方法将数据 写入磁盘 而不必每输出一个字节就向磁盘中写 一次数据 1 Buffere

13、dInputStream类的构造函数和方法 BufferedInputStream InputStream in 构造一个 BufferedInputStream BufferedInputStream InputStream in int size 构造一 个具有给定的缓冲区大小的BufferedInputStream int available 得到可以从这个输入流读取的字节数 void close 关闭流 void mark int readlimit 在这个输入流的当前位置做标 记 boolean markSupported 检查这个输入流是否支持 mark和reset方法 int r

14、ead 读取数据的下一个字节 int read byte b int off int len 从这个字节输入流的给 定偏移量处开始读取字节 存储到给定的字节数组 void reset 将缓冲区重新设置到加标记的位置 long skip long n 跳过n个字节的数据 2 BufferedOutputStream类的构造函数和方法 BufferedOutputStream OutputStream out 构造一个 BufferedOutputStream BufferedOutputStream OutputStream out int size 构造一个具有给定的缓冲区大小的 Buffer

15、edOutputStream void flush 刷新这个流 void write byte b int off int len 将给定的字节数 组写到这个缓冲输出流 void write int b 将给定的字节写到这个缓冲输出流 下面我们通过一个例子来演示BufferedInputStream类 的作用 程序读取并显示字节数组中的字符 当遇 到 字符时 如果和下一个 字符之间的字符没 有空格 则两个 之间的字符不显示 例11 4 bufinstreams ja va 运行结果 This is a test of buffer Streams 二 字符流 尽管字节流更快更高效 但是人们读起

16、来十分 困难 因为是二进制 接下来我们讲述文本格式的输入输出 即字符 流 字符流主要是用来支持Unicode的文字内容 绝 大多数在字节流中所提供的类 都有相对应 的字符流的类 Reader BufferedReader InputStreamReader FileReader Writer PrintWriter BufferedWriter OutputStreamWriter FileWriter 一 Reader和Writer Reader是所有输入字符流的基类 Writer是所有输出字符流的基类 你可以使用从这两个类派生出的类来读写 字符流 这两个类常用的方法与 InputStream OutputStream相类似 区别在于参数内的byte 需要改为char 二 InputStreamReader和 OutputStreamWriter 为了从键盘读取按键 常常从System in 构造一个InputStreamReader流 然后 使用InputStreamReader类的read方法 读取用户输入的内容 而OutputStreamWriter与 InputStreamR

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号