版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、江苏大学计算机学院 Version 2.0,第14章 高级I/O流,Page 2,Java 流式输入/输出原理 Java流类的分类 输入/输出流类 常见的节点流和处理流 文件流 缓冲流 数据流 转换流 Print流 Object流,内容,Page 3,Java流式输入/输出原理,在Java程序中,对于数据的输入/输出操作以“流” (stream) 方式进行;J2SDK提供了各种各样的“流”类,用以获取不同种类的数据;程序中通过标准的方法输入或输出数据。,文件,程序,文件, 00101,程序,网路连接,程序,程序,程序,文件,程序,“hello”,Page 4,流可以看作是从源开始或到目的地的一
2、个数据流。 源流启动数据流,因此,也称为输入流。 目的流中止了数据流,因此也称为输出流。 源和目的都是两个节点流。 节点流的类型是文件、内存和线程或进程之间的管道。,Java流式输入/输出原理,Page 5,流是一个很形象的概念,Page 6,输入/输出流的分类,java.io 包中定义了多个流类型(类或抽象类)来实 现输入/输出功能;可以从不同的角度对其进行分类: 按数据流的方向不同可以分为输入流和输出流。(以程序的角度来考虑) 按处理数据单位不同可以分为字节流和字符流。 按照功能不同可以分为节点流和处理流。,J2SDK 所提供的所有流类型位于包java.io内都分别继承自以下四种抽象流类型
3、。,Page 7,节点流和处理流,节点流为可以从一个特定的数据源(节点)读写数据(如:文件,内存),数据源,程序,处理流是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。,节点流,数据源,数据源,程序,程序,Page 8,InputStream,继承自InputSteam的流都是用于向程序中输入数据,且数据的单位为字节(8 bit);下图中深色为节点流,浅色为处理流。,Page 9,InputStream的基本方法,/读取一个字节并以整数的形式返回(0255), /如果返回-1已到输入流的末尾。 int read() throws IOExceptio
4、n /读取一系列字节并存储到一个数组buffer, /返回实际读取的字节数,如果读取前已到输入流的末尾返回-1 int read(byte buffer) throws IOException /读取length个字节 /并存储到一个字节数组buffer,从off位置开始存,最多len /返回实际读取的字节数,如果读取前以到输入流的末尾返回-1 int read(byte buffer, int off, int len) throws IOException /关闭流释放内存资源 void close() throws IOException,其他方法包括 void close() : vo
5、id mark(int readlimit) int available() void reset() long skip(long n) boolean markSupported(),Page 10,OutputStream,继承自OutputSteam的流是用于程序中输入数据,且数据的单位为字节(8 bit);下图中深色为节点流,浅色为处理流。,Page 11,OutputStream的基本方法,/向输出流中写入一个字节数据,该字节数据为参数b的低8位 void write(int b) throws IOException /将一个字节类型的数组中的数据写入输出流 void write
6、(byte b) throws IOException /将一个字节类型的数组中的从指定位置(off)开始的 /len个字节写入到输出流 void write(byte b, int off, int len) throws IOException /关闭流释放内存资源 void close() throws IOException /将输出流中缓冲的数据全部写出到目的地 void flush() throws IOException,良好的编程习惯,先flush(),再close(),Page 12,Reader,继承自Reader的流都是用于向程序中输入数据,且数据的单位为字符(16 bi
7、t);下图中深色为节点流,浅色的为处理流。,Page 13,Reader 的基本方法,/读取一个字符并以整数的形式返回(0255), /如果返回-1已到输入流的末尾。 int read() throws IOException /读取一系列字符并存储到一个数组buffer, /返回实际读取的字符数,如果读取前已到输入流的末尾返回-1 int read(char cbuf) throws IOException /读取length个字符 /并存储到一个数组buffer,从off位置开始存,最多读取len /返回实际读取的字符数,如果读取前以到输入流的末尾返回-1 int read(char cb
8、uf, int off, int len) throws IOException /关闭流释放内存资源 void close() throws IOException,Page 14,Writer,继承自Writer的流都是用于程序中输入数据,且数据的单位为字符(16 bit);下图中深色为节点流,浅色为处理流。,Page 15,Writer 的基本方法,/向输出流中写入一个字符数据,该字节数据为参数b的低16位 void write(int c) throws IOException /将一个字符类型的数组中的数据写入输出流, void write(char cbuf) throws IOE
9、xception /将一个字符类型的数组中的从指定位置(offset)开始的 /length个字符写入到输出流 void write(char cbuf, int offset, int length) throws IOException /将一个字符串中的字符写入到输出流 void write(String string) throws IOException /将一个字符串从offset开始的length个字符写入到输出流 void write(String string, int offset, int length) throws IOException /关闭流释放内存资源 voi
10、d close() throws IOException /将输出流中缓冲的数据全部写出到目的地 void flush() throws IOException,Page 16,节点流,各种类型的字符和字节流类是:,Page 17,访问文件,FileInputStream和FileOutputStream分别继承自InputStream和OutputStream用于向文件中输入和输出字节。 FileInputStream和FileOutputStream的常用构造方法: FileInputStream(String name) throws FileNotFoundException File
11、InputStream(File file) throws FileNotFoundException FileOutputStream(String name)throws FileNotFoundException FileOutputStream(File file) throws FileNotFoundException FileOutputStream(File file, boolean append) throws FileNotFoundException,FileInputSteam 和 FileOutputStream 类支持其父类InputStream 和OutputS
12、tream 所提供的数据读写方法。 注意: 在实例化FileInputStream和FileOutputSteam流时要用trycatch语句以处理其可能抛出的FileNotFoundException。 在读写数据时也要用trycatch语句以处理可能抛出的 IOException。 FileNotFoundException是IOException的子类,例:TestFileInputStream.java / TestFileOutputStream.java,Page 18,访问文件,FileReader 和 FileWriter 分别继承自Reader和Writer,FileInpu
13、tSteam与FileOutputStream类似,所不同的时FileReader和FileWriter向文件输入和输出的数据单位为字符。 FileReader和FileWriter的常用构造方法:,public FileWriter(File file) throws IOException public FileWriter(File file, boolean append) throws IOException public FileWriter(String fileName)throws IOException public FileWriter(String fileName,b
14、oolean append) throws IOException public FileReader(String fileName) throws FileNotFoundException public FileReader(File file) throws FileNotFoundException,例:TestFileWriter.java / TestFileReader.java,Page 19,I/O 流链接,输入流链:,输出流链:,Page 20,处理流类型,Page 21,缓冲流,缓冲流要套接在相应的节点流之上,对读写的数据提供了缓冲功能,提高了读写的效率同时增加了一些新
15、的方法。 J2SDK提供四种缓冲流,其常用的构造方法: BufferedReader(Reader in) BufferedReader(Reader in,int sz)/sz为自定义缓冲区大小 Buffered Writer (Writer out) Buffered Writer ( Writer out, int sz) BufferedInputStream(InputStream in) BufferedInputStream( InputStream in,int size) BufferedOutputStream (OutputStream out) BufferedOutp
16、utStream (OutputStream out,int size) 缓冲输入流支持父类的mark和reset方法 BufferedReader提供了readLine方法用于读取一行字符串(以r或n分隔) BufferedReader提供了newLine方法用于写入一行分隔符 对于输出的缓冲流,写出的数据会先存在内存的缓存,使用flush方法会将内存中数据立刻写出,TestBufferStream1/2.java,Page 22,转化流,InputStreamReader 和 OutputStreamWriter /用于字节数据到字符数据之间的转化 InputStreamReader需要和
17、InputStream“套接” OutputStreamWriter需要和OutputStream“套接” 转化流在构造时可以指定其编码集合 InputStream isr = new InputStreamReader(System.in,”ISO8859_1”),TestTransForm1/2.java,Page 23,数据流,DataInputStream 和DataOutputStream 分别继承自InputStream和OutputStream,它属于处理流,分别需要“套接”在InputStream和OutputStream类型的节点流上 DataInputStream 和Dat
18、aOutputStream提供了可以存取与机器无关的Java原始数据类型的方法 DataInputStream 和DataOutputStream的构造方法为: DataInputStream (InputStream in) DataOutputStream(OutputStream out),TestDataStream.java,Page 24,Print流,PrintStream和 PrintWriter都是输出流,分别针对字符和字节 PrintStream和 PrintWriter提供了重载的print方法 Println方法用于多种数据类型的输出 PrintStream和 Prin
19、tWriter的输出操作不会抛出异常,用户通过检测错误状态获取错误信息 PrintStream和 PrintWriter有自动flush功能 PrintStream(OutputStream out) PrintStream(OutputStream out,boolean autoFlush) PrintWriter(Writer out) PrintWriter(Writer out,boolean autoFlush),TestPrintStream1/2/3.java,Page 25,Object流,ObjectInputStream / ObjectOutputStream /直接将Object读入或者写出 public ObjectInputStream(InputStream in) throws IOException/创建一个输入流对象,可以从指定的输入流对象in中读取对象,读取的对象必须是序列化的 public ObjectOutputStream(outputStream out) throws IOException /创建一个输出流对象,可以把一个序列化对象写入到指定的输出流out中 对象的序列化 所谓序列化就是把对象把对象转换为一系列的字节来记录
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 蓄电池机车运行安全技术措施培训
- 2026马其顿电信行业竞争格局分析及市场发展策略研究
- 文物保护单位与博物馆安全防范工程设计培训
- 2026中国叶黄素酯行业社会责任履行与品牌美誉度研究报告
- 2026人工智能产业市场供需格局分析及投资布局优化评估研究
- 2026中国智慧港口自动化设备更新换代需求评估报告
- 2026中国玩具动漫行业IP发展及投资策略研究报告
- 我要安全 必须我会全员安全能力提升培训
- 矿井瓦斯安全管理培训课件
- 燃气管网安全运行对策培训
- 酒水仓储服务协议
- (2025年标准)露台设计协议书
- 工会经审业务网络知识竞赛题库
- 检验科仪器设备管理课件教学
- 呼吸衰竭患者观察与护理
- (高清版)DB62∕T 4278.5-2023 消防安全规范 第5部分:宗教活动场所
- 人教版七年级劳动教育上册全册教案
- 家庭教育讲师班培训
- 重卡换电站可行性研究报告
- 犬猫产科疾病 子宫蓄脓(宠物疾病防治课件)
- 弹性力学有限元法详解
评论
0/150
提交评论