第七章 输入与输出_第1页
第七章 输入与输出_第2页
第七章 输入与输出_第3页
第七章 输入与输出_第4页
第七章 输入与输出_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1,第七章 输入/输出,7.1 流式I/O基础 7.2 文件 7.3 随机存取文件 7.4 对象串行化,2,流Stream的概念,流是从源到目的的字节的有序序列,先进先出。 两种基本流: Input stream(输入流),Output stream(输出流),3,流操作的过程,Reading: open a stream while more information read information close the stream,Writing : open a stream while more information write information close the strea

2、m,4,流的分类,按结构分 节点流 过滤流 根据流中的数据单位不同 字节流 字符流,5,两种结构的流,节点流 以特定源如磁盘文件或内存某区域或线程之间的管道为端点构造的输入/输出流。 过滤流 使用其它已经存在的流为端点构造的输入/输出流,它要对与其相连的另一个流进行某种转换。,6,两种体系的流类,流式I/O类根据操作的数据类型(16位字符或字节)分成两个层次体系。 字节流 流中的数据以8位(1个字节)为单位进行读写,以InputStream和OutputStream为基础类 字节流一般用于读写二进制数据,例如图像和声音数据。 字符流 流中的数据以16位字符为单位进行读写,以Reader和Wri

3、ter为基础类 一般用于读取文本 一般,Java中的流指字节流,7,7.1.2 字节流输入流类层次图,8,InputStream类的方法,三个基本read()方法 int read()/读一个字节返回 int read(byte ) / 将数据读入byte, 返回读的字节数 int read( byte, int offset, int length ) 其他方法 void close( ) /关闭流。自顶向下关闭Filter stream int available() /返回未读的字节数 long skip(long n) / 跳过n个字节 boolean markSupported( )

4、 /测试打开的流是否支持书签 void mark(int) /标记当前流,并建立int大小缓冲区 void reset( ) / 返回标签处,9,字节输出流的类层次图,10,OutputStream类的方法,三个基本write()方法 void write( int ) / 写一个字节 void write(byte ) / 写一个字节数组 void write(byte , int offset, int length ) 其他方法 void close( ) void flush( ) / 强行写,11,7.1.3 字符流,Reader和Writer是字符流的两个抽象超类。 Reader和

5、Writer 类定义了在输入流/输出流中读写16位字符的通用API。 可以处理Unicode字符集中的所有字符。 每一个核心输入、输出流,都有相应的Reader和Writer版本。,12,字符输入流的类层次图,13,Reader类的基本方法,int read(); /读单个字符,如果返回值为-1,则表示文件结束 int read(char cbuf); /读字符放入数组中,返回所读的字符数 int read(char cbuf, int offset, int length); /读字符放入数组的指定位置 ,返回所读的字符数 void close( ) /关闭流 long skip(long

6、n) / 跳过n个字符 boolean markSupported( ) /测试打开的流是否支持书签 void mark(int) /标记当前流,并建立int大小缓冲区 void reset( ) / 返回标签出 boolean ready() /测试当前流是否准备好进行读,14,字符输出流的类层次图,15,Writer类的基本方法,int write(int c) ; / 写单个字符 int write(char cbuf) ; / 写字符数组 int write(char cbuf, int offset, int length) ; /写 字符数组中的部分字符 int write(Str

7、ing str) ; /写字符串 int write(String str, int offset, int length) ; /写字符串的一部分 void close( ) /关闭流 void flush( ) / 强行写,16,字节流与字符流的比较,Reader 和 InputStream以及Writer 与 OutputStream定义的API类似,但操作的数据类型不同。 所有的流InputStream、 OutputStream 、Reader、 Writer 在创建时自动打开;程序中可以调用close方法关闭流,否则Java运行环境的垃圾收集器将隐含将流关闭。,17,7.1.4 J

8、ava流式I/O类概述,18,19,20,7.1.5 输入/输出流的套接,一般常通过过滤流将多个流套接在一起,利用各种流的特性共同处理数据。 套接的多个流构成了一个流链。 输入流链示例,21,输出流链示例,流链的中间流和程序直接读写的流都是过滤流,而直接对数据源读写的是节点流,程序中可以根据对外界输入/输出的需要,构造合适的I/O流链,以方便数据的处理并提高处理效率。,22,7.1.6 常用输入/输出流类-文件流,文件流(对文件系统中的文件进行读写) FileInputStream FileOutputStream FileReader FileWriter 创建文件流 调用相应类的构造方法,

9、并将以字符串形式的文件名或File类的对象作为参数 public FileInputStream(String name) public FileInputStream(File file) P.184例7-1 通过文件字节流实现文件的复制 P.185例7-2 通过文件字符流实现文件的复制,23,7.1.6 常用输入/输出流类-缓存流,缓存流 BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter 把数据从原始流成块读入或把数据积累到一个大数据块后再成批写出,通过减少系统资源的读写次数来加快程序的执行 Buf

10、feredOutputStream 或BufferedWriter类仅在缓冲区满或调用flush()方法时才将数据写到目的地。 缓存流是过滤流,在创建具体流时,需要给出一个InputStream/OutputStream类型的流作为前端流,并可以指明缓冲区的大小。 public BufferedInputStream(InputStream in) public BufferedInputStream(InputStream in, int size) readLine(),24,7.1.6 常用输入/输出流类-管道流,管道流 实现线程间数据的直接传输。线程A可以通过它的管道发送数据,另一个线

11、程B把它的输入管道接到A的输出管道上,即可接受A发送的数据。 管道流模型 一个管道由管道输出端(管道输出流)与管道输入端(管道输入流)连接而成。管道的连接实际上是使管道的输出流指向管道输入流。从而可以从管道的输入流读取写入管道输出流的数据。,25,7.1.6 常用输入/输出流类-管道流,PipedReader/PipedInputStream 实现管道的输入流; PipedWriter/PipedOutputStream 实现管道的输出流。,26,7.1.6 常用输入/输出流类-管道流,管道流的创建 将管道输出流与管道输入流进行挂接 PipedInputStream pin= new Pipe

12、dInputStream( ); PipedOutputStream pout = new PipedOutputStream(pin); PipedInputStream pin= new PipedInputStream( ); PipedOutputStream pout = new PipedOutputStream(); pin.connect(pout);或pout.connect(pin)。 管道流创建后,需要把它的输出流连接到一个线程的输出流,并且把它的输入流连接到另一个线程的输入流,才能利用该管道实现两个线程之间的数据交流。,27,7.1.6 常用输入/输出流类-数据流,数据

13、流(读写基本数据类型) DataInputStream DataOutputStream DataInputStream类的常用方法 byte readByte( ) boolean readBoolean( ) long readLong( ) char readChar( ) double readDouble( ) float readFloat( ) short readShort( ) int readInt( ),28,7.1.6 常用输入/输出流类-数据流,DataOutputStream类的常用方法 void writeByte(byte) void writeBoolean(

14、boolean) void writeLong( long ) void writeChar(char) void writeDouble(double) void writeFloat( float) void writeshort(short) void writeInt ( int) void writeBytes(String) void writeChars(String ) P.191例7-4 数据流示例,29,7.1.6常用输入/输出流类-标准输入输出,标准输入: 键盘 标准输出: 显示器屏幕(加载Java程序的命令窗口) Java程序使用字符界面与系统标准输入/输出间进行数据通

15、信。 标准输入/输出: System.in (public static final InputStream in) 标准输入流,在程序运行时一直打开,并准备好提供输入的数据,一般对应于键盘输入 System.out(public static final PrintStream out) 标准输出流,在程序运行时一直打开,并准备好接收输出的数据,一般对应于屏幕 System.err (public static final PrintStream err) 标准错误输出流,在程序运行时一直打开,并准备好接收输出的数据,一般对应于屏幕并用来显示错误消息。,30,7.1.6常用输入/输出流类-标

16、准输入输出,标准输入 System.in 使用格式 try char ch=System.read(); catch(IOException e) read()方法将从键盘缓冲区读入一个字节的数据,但返回的是16位的整型值,该整型值只有低位字节是真正输入的数据,高位字节全部是0 System.in.read()方法的执行,将使整个程序被挂起 标准输出 System.out.println(); System.out.print(); P.194 例7-5 从标准输入读取字符串并在标准输出显示,31,7.1.7 数组流,流的源和目标除了可以是文件外,还可以是计算机内存。 数组字节输入流:Byte

17、ArrayInputStream 数组字节输出流:ByteArrayOutputStream 数组字符输入流:CharArrayReader 数组字符输出流:CharArrayWriter ByteArrayInputStream的方法 ByteArrayInputStream(byte buf) ByteArrayInputStream(byte buf,int offset,int length) public int read() public int read(byte b, int off, int len),32,7.1.7 数组流,ByteArrayOutputStream的方法

18、 ByteArrayOutputStream( ) ByteArrayOutputStream(int size) public void write() public void write(byte b, int off, int len) public byte toByteArray(),33,7.2 文件,File类是外存文件和目录的抽象表示。 File类用于操纵文件的信息,但不提供对文件数据读取的方法。 FileReader、FileWriter、 FileInputStream、FileOutputStream 可以得到文件或目录的描述信息,包括文件名、路径、可读写性、长度等,还可

19、以生成新的目录、临时文件、改变文件名、删除文件、列出一个目录中的所有文件或满足某种模式的文件等。,34,7.2.1 创建File对象,常用构造方法 public File(String filename); public File(String directoryPath,String filename); public File(File f, String filename); 绝对路径 class Student implements Serializable/实现Serializable接口 String name=null; double height; Student(String name,double height) =name; this.height=height; public void setHeight (double c) this.height=c; public class Example public static voi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论