




已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
java iopackage part2Java的输入输出 主要内容 Java的基本输入输出面向Byte面向Character节点流与处理流IO流的类层次简单IO流过滤流 JAVA的输入 输出 程序经常需要从外部获取数据或者向外部输出数据 位置 磁盘 网络 内存 另一个程序形式 对象 字符 文本文件 声音 图形Java中 输入与输出 I O 是通过流进行的 它的特点是数据的发送和获取都是沿数据顺序进行的 流模型建立在从某个数据源到数据池的数据传输基础上 fromsourcetosink 也就是说把不同的输入 输出源 键盘 文件 网络连接 等抽象表示为 流 两类基本的流 输出流 只能向其写出数据 而不能从中读取数据 输入流 只能从中读取数据 而不能向其写出数据 流编程基础 按流的数据单位大小分字符流和字节流 流是单向的 流提供数据是输入流 向流中写数据是输出流 见下图流模型中四个抽象类 它们是流模型的父类 InputStream 字节输入流InputStream是抽象类 定义了字节输入流的框架 它的最重要的三个方法 输入流提供数据输入 intread intread byte buffer intread byte buffer intoffset intlength 大部分子类的命名是XxxInputStream 例如FileInputStream DataInputStream OutputStream 字节输出流OutputStream是抽象类 定义了字节输出流的功能框架 它的最重要的三个方法 提供数据输出 voidwrite intc voidwrite byte buffer voidwrite byte buffer intoffset intlength close 大部分子类的命名是XxxOutputStream 例如FileOutputStream DataOutputStream InputStream类层次 OutputStream类层次 Java1 1的I O Reader与Writer 与1 0 2相比的优越性国际化引入了字符流 CharacterStream 处理16位的Unicode码 而1 0 2中的字节流 ByteStream 仅处理8位字节 新引入的Reader及Writer类均支持Unicode码 性能新的API的速度优于1 0 2的类库举例 ReadFile2 java Java1 1的I O 工作原理 Java使用unicode字符集 用其来表示字符和字符串 所有的字符都是16位的 Reader能够将采用其他字符编码的输入流中的数据转化为Unicode字符 Writer再把Unicode字符转化为指定字符 写到输出中 比如 英语国家的缺省字符编码是ISO8859 1 当读写文本数据的时候必须指定编码 否则可能会出现乱码 Reader Writer Reader和Writer类是一切字符流的超类 它们封装的功能大致和InputStream OutputStream一样 子类命名常为XxxReader XxxWriter 以下为二类的主要API方法 intread intread char cbuf intread char cbuf intoffset intlength voidwrite intc voidwrite char cbuf voidwrite char cbuf intoffset intlength voidwrite Strings voidwrite Strings intoffset intlength Reader类层次 Writer类层次 节点流和处理流 节点流 nodestream 传输未经处理数据可以从 向一个特定的地方 节点 读写数据 例如磁盘或者一块内存 处理流 processingstream 传输经处理数据是对一个已存在的流的连接和封装 通过所封装的流的功能调用实现数据读 写功能二者的区分大致可以从构造器参数中或类名称中看出来 常见节点流列表 常见处理流列表 I O链 在java中 并不是用一个单一的类来创建流对象 通过叠加多个对象提供所期望的功能 创建一个目的单一的结果流 却需要创建多个流的对象 输出流与输入流之间不能建立连接 I O链 直接与数据源或者数据目的连接的流一般没有缓冲区 可以串联到另一流的流一般有缓冲区 比如BufferedOutputStream 如果流带有缓冲区 数据不会直接到达通道另一端 会暂时保存在缓存区当中 当数据超过缓冲区 才会到达通道另一端 或者使用flush 方法 强迫数据通过流通道 流的串联是堆栈方式的 显示地调用栈顶流的flush 方法 程序会依次调用所有串联流的flush 方法 调用close 方法关闭流 显示地关闭栈顶流即可 对于输出流 close 方法会自动调用flush 方法 举例 I OStreamChaining Proxy DecoratorPatterns FilterInputStream和FilterOutputStream使用了代理 Proxy 模式 代理模式是代理对象对被代理对象的一个功能不变的封装 Decorator模式也是某个对象对另外一个对象的功能包装 某些方法它直接转给包含对象 而某些方法则由包装对象来提供 这样新包装对象可以提供扩展的功能 处理流大部分采用了Decorator模式 处理流就是对其它节点流或处理流进一步的功能包装 简单的IO流 1 FileInput OutputStream代表一个在本地文件系统中的文件的IO流 可通过文件名或文件对象创建 FileInputStreamfis newFileInputStream in txt FileOutputStreamfos newFileOutputStream newFile out txt intc while c fis read 1 fos write c fis close fos close Example ReadFile1 java 简单的IO流 2 SequenceInputStreamSequenceInputStream InputStream InputStream 把两个InputStream连接为一个InputStreamByteArrayInput OutputStream从字节数组读取 向字节数组写入8位数据StringBufferInputStream Strings 把一个String转换为InputStreamObjectInputStream ObjectOutputStream举例 ObjectExample java和MyServer javaMyClient java 简单的IO流 3 FilterInput OutputStream过滤流作用 给朴素的Input OutputStream加上一些修饰 某些有用的格式来源 Input OutputStream种类 DataInput OutputStreamBufferedInput OutputStreamPrintStream 提供了print和println其他 简单的IO流 4 DataInput OutputStream对于基本数据类型进行有格式的读写DataInputStream实现了DataInput接口readInt Float Char Boolean Long Double DataOutputStream实现了DataOutput接口writeInt Float Char Boolean Long Double 简单的IO流 举例DataInOut java inti 20 floatd float 20 22 Strings Hello测试 try DataOutputStreamdout newDataOutputStream newFileOutputStream test txt dout可格式输出DataInputStreamdin newDataInputStream newFileInputStream test txt din可格式输入 利用DataOutputStreamdout写出数据dout writeInt i dout writeFloat d dout writeUTF s System out println writesuccessfully 利用DataInputStreamdin读入数据System out println readingout System out println din readInt System out println din readFloat System out println din readUTF catch Exceptione 简单的IO流 5 BufferedInput OutputStream自动利用内存缓冲 避免每次想要数据时都进行物理性的读取BufferedInputStream InputStreamin BufferedInputStream InputStreamin intsize 还可在其外面再加包装newDataInputStream newBufferedInputStream newFileInputStream File1 txt 简单的IO流 5 PrintStream类是FilterOutputStreamPrintStream OutputStreamout booleanautoFlush 自动刷新 这意味着可在写入字节数组之后自动调用flush方法 可调用其中一个println方法 或写入一个新行字符或字节 n System的标准输入与标准输出 System in System out是由JVM自动创建的对象 System in是InputStream的子类 System out是PrintStream的子类 System in read 返回一个16位整型为了方便 经常进行封装处理BufferedReaderbr newBufferedReader InputStreamReader System in br readLine 桥梁类 桥梁 InputStreamReader类和OutputStreamWriter类 InputStream Reader OutputStream Writer Input OutputStreamReader 从该类的构造器可以看出 以输入为例 publicInputStreamReader InputStreamin publicInputStreamReader InputStreamin Stringcharset 指定字符编码方式例如 文件Hello txt采用了UTF8编码方式newInputStreamReader newFileInputStream Hello txt UTF8 为了提高效率 一般把inputStreamReader封装在BufferReader里面 FileReader与FileWriter 用于从文件中读取字符数据 该类只能使用平台默认的字符编码方式 不能指定其它方式 存在跨平台的风险 构造方法FileReader Filefile FileReader StringfileName FileWriter Filefile FileWriter Filefile booleanappend FileWriter StringfileName FileWriter StringfileName booleanappend BufferReader与PrintWriter BufferReader提高效率 可直接读入一行字符串readLine PrintWriter的构造方法 PrintWriter OutputStream Writer PrintWriter OutputStream Writer booleanautoFlush 提供了print 和println 方法 练习 编写一段javaApplication程序 从一个文件in txt中读取内容 再将它写到文件out txt中 in txt采用本地平台默认的字符编码 而out txt采用和本地平台不同的字符编码UTF8 MyReaderWriter java RandomAccessFile类 1 随机访问文件 RandomAccessFile类不属于Input OutputStream用于访问本地文件可读可写同时实现了DataInput和DataOutput接口 可同时进行有格式的读写创建时指定对应某一文件完成读或写操作RandomAccessFiles1 newRandomAccessFile a txt r Filef1 newFile a txt RandomAccessFiles2 newRandomAccessFile f1 rw r 和 rw 是java中文件访问权限的两种mode 练习 如何打开一个文件 例如a dat 读其内容 请选择1个选项 a newRandomAccessFile newFileInputStream a dat b newFileInputStream newRandomAccessFile a dat r c newRandomAccessFile a dat rw d newRandomAccessFile a dat RandomAccessFile类 2 随机文件读写readXx writeXx 实现DataInput Output接口readInt Float Char Boolean Long Double writeInt Float Char Boolean Long Double readLine 读写位置 文件指针及其操作函数publiclonggetFilePointer 相当于开头部分的指针的位置publicvoidseek longn publicintskipBytes intn 所有的方法都可能产生异常 要使用try和catch RandomAccessFile类举例 第一次操作 依次写出10个数据RandomAccessFilerf 读
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 闲置码垛机转让合同范本
- 网签三方协议如何签合同
- 游戏合作合同协议书范本
- 来料加工合同协议书模板
- 消防维保解除合同协议书
- 移门订货协议书合同范本
- 煤炭应急保供协议书模板
- 矿山水库出租合同协议书
- 湛江钢结构施工合同范本
- 自动售货机拍卖合同范本
- 食堂食品安全应急处置方案
- 退出中华人民共和国国籍申请表
- 西方经济学(第二版)完整整套课件(马工程)
- 检验科安全管理制度汇总
- (完整word版)中医学题库
- 英语音标拼读方法讲解
- MT 113-1995煤矿井下用聚合物制品阻燃抗静电性通用试验方法和判定规则
- GB/T 27775-2011病媒生物综合管理技术规范城镇
- GB/T 16841-2008能量为300 keV~25 MeV电子束辐射加工装置剂量学导则
- GB/T 11264-2012热轧轻轨
- 眼镜镜架知识汇总课件
评论
0/150
提交评论