java第六章延边大学计算机系.ppt_第1页
java第六章延边大学计算机系.ppt_第2页
java第六章延边大学计算机系.ppt_第3页
java第六章延边大学计算机系.ppt_第4页
java第六章延边大学计算机系.ppt_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

第六章 Java输入输出系统,Decorator模式,咖啡厅问题(摘自Head First设计模式),Beverage:饮料 HouseBlend:家常混合咖啡 DarkRoast:黑咖啡 Decaf:无咖啡因咖啡 Espresso:意大利咖啡,Decorator模式,除了咖啡,咖啡厅还会提供丰富的调料: Mocha:摩卡 Milk:牛奶 Soy:豆奶 Whip:起泡牛奶,Decorator模式,类爆炸!,1.如果新出一种调料会怎么样? 2.如果咖啡价格改变会怎么样?,Decorator模式,利用装饰器模式解决问题 从一种基本饮料开始,在运行时用各种调料“装饰”各种咖啡。 例如:客户点了DarkRoast,加一份Mocha和一份Whip。 new一个DarkRoast对象 用一个Mocha对象装饰它。 用一个Whip对象装饰它。 调用Whip的cost方法计算总价格。,Decorator模式,Decorator模式,咖啡厅程序:Coffee.java,Decorator模式,程序:DecoratorPattern.java,流式I/O原理,木桶,流,在java中,对于数据的输入、输出操作以“流”(stream)方式进行。 Jdk提供了各种各样的“流”类,用以获取不同的数据。,流的分类,可以从不同的角度进行分类。 按流的方向不同可以分为输入流和输出流 按处理数据单位的不同可以分为字节流和字符流。 按功能的不同可以分为节点流和处理流。 jdk提供的所有流类型位于包java.io内部,分别继承自以下四种抽象流类型。,流的分类,节点流为可以从一个特定的数据源(节点)读写数据(文件,内存),处理流是“连接”在已存在的流之上,通过对数据的处理为程序提供更强大的读写功能。,InputStream,继承自InputStream的流都是用于向程序中输入数据,数据的单位为字节(8bit);下图中深色为节点流,浅色为处理流。,InputStream,Java I/O中的装饰器模式,例:BufferedReader br = new BufferedReader(new InputStreamReader(System.in);,InputStream,/读取一个字节并以整数的形式返回(0255),如果 /返回-1,已到输入流的末尾。 int read() throws IOException /读取一系列字节并存储到一个数组buffer,返回实际读取 /的字节数,如果读取前已到输入流的末尾,返回-1。 int read(byte buffer) throws IOException /读取length个字节,并存储到一个字节数组buffer, /从offset位置开始返回实际读取的字节数,如果读取前已 /到输入流的末尾,返回-1。 int read(byte buffer, int offset, int length) throws IOException,InputStream,/关闭流,释放内存资源 void close() throws IOException /跳过n个字节不读,返回实际跳过的字节数。 long skip(long n) throws IOException,OutputStream,继承自OutputStream的流是用于程序中输入数据,且数据的单位为字节(8 bit);下图中深色为节点流,浅色为处理流。,OutputStream,OutputStream的基本方法 /向输出流写入一个字节数据,该字节数据为参数b的低8位 Void write(int b) throws IOException /将一个字节类型数组中的数据写入输入流 Void write(byte b) throws IOException /将一个字节类型的数组中的从指定位置(off)开始的 /len个字节写入到输出流 void write(byte b, int off, int len) throws IOExepction,OutputStream,/关闭流,释放内存资源 void close() throws IOException /将输出流中缓冲区的数据全部写出到目的地。 void flush() throws IOExcepion,Reader,继承自Reader的流都是用于向程序中输入数据,且数据的单位为字符(16 bit);下图中深色为节点流,浅色为处理流。,Reader,Reader的基本方法 /读取一个字符,并以整数形式返回(065535),如果 /返回-1,说明已到输入流的末尾。 int read() throws IOException /读取一系列字符并存储到一个数组buffer,返回实际读 /取的字符数,如果读取前已到输入流的末尾,则返回-1 int read(char cbuf) throws IOException /读取length个字符,并存储到一个字符数组buffer, /从length位置开始返回实际读取的字符数,如果读取前已 /到输入流的末尾,返回-1。 int read(char cbuf, int offset, int length) throws IOException,Reader,/关闭流,释放内存资源 void close() throws IOException /跳过n个字符不读,返回实际跳过的字节数。 long skip(long n) throws IOException,Writer,继承自Writer的流都是用于程序中输入数据,且数据的单位为字符(16 bit);下图中深色为节点流,浅色为处理流。,Writer,Writer的基本方法 /向输出流中写入一个字符数据,该字节数据 /为参数b的16位。 void write(int c) throws IOException /将一个字符类型数组中的数据写入输出流 void write(char cbuf) throws IOException /将一个字符类型数组中的从指定位置(offset) /开始的length个字符写入到输出流 void write(char cbuf, int offset, int length) throws IOException,Writer,/将一个字符串中的字符写入到输出流 void write(String string) throws IOException /将一个字符串从offset开始的length个字符 /写入到输出流 void write(String string, int offset, int length) throws IOException /关闭释放内存资源 void close() throws IOException /将输出流中缓冲的数据全部写出到目的地 void flush() throws IOException,节点流类型,访问文件,FileInputStream和FileOutputStream分别继承自InputStream和OutputStream用于向文件中输入和输出字节。,访问文件,FileInputStream 和FileOutputStream的常用构造方法: FileInputStream(File file) FileInputStream(String name) FileOutputStream(File file) FileOutputStream(String name) FileOutputStream(String name,boolean append),访问文件,FileInputStream和FileOutputStream类支持其父类InputStream和OutputStream所提供的数据读(read)写(write)方法。 注意: 实例化FileInputStream和FileOutputStream的时候要用try-catch捕获FileNotFoundException 读写的时候要用try-catch捕获IOException 实例:TestFileInputStream.java TestFileOutputStream.java,访问文件,FileReader和FileWriter用于在文件中读写字符。 实例: TestFileReader.java TestFileWriter.java,处理流,缓冲流,缓冲流要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,同时增加了一些新的方法。 jdk提供了四种缓冲流,其常用的构造方法为: BufferedInputStream(InputStream in) BufferedInputStream(InputStream in, int size) BufferedOutputStream(OutputStream out) BufferedOutputStream(OutputStream out, int size) BufferedReader(Reader in) BufferedReader(Reader in,int sz)/sz为自定义缓冲区的大小 BufferedWriter(Writer out) BufferedWriter(Writer out, int sz),缓冲流,BufferedInputStream支持父类的mark()和reset()方法。 BufferedReader提供了readLine方法用于读取一行字符串。 BufferedWriter提供了newLine用于写入一个“行分隔符”。 对于BufferedOutputStream,写出的数据会先在内存中缓存,使用flush方法将会使内存中的数据立刻写出。 实例: TestBufferedStream.java TestBufferedReaderWriter.java,转换流,InputStreamReader和OutputStreamWriter用于字节数据到字符数据之间的转换。 InputStreamReader需要“套接“在InputStream OutputStreamWriter需要“套接”在OutputStream。 实例: TestInputStreamReader.java TestOutputStreamWriter.java,数据流,DataInputStream和DataOutputStream分别继承自InputStream和OutputStream,它属于处理流,需要分别“套接”在InputStream和OutputStream类型的节点流上。 DataInputStream和DataOutputStream提供了可以存取与机器无关的Java原始类型数据(如:int, double等)的方法。 DataInputStream和DataOutputStream的构造方法为: DataInputStream(InputStream in) DataOutputStream(OutputSteam out),数据流,实例: TestDataStream.java,Print流,PrintWriter和PrintStream都属于输出流,分别针对与字符和字节。 PrintWriter和PrintStream提供了重载的print Println方法用于多种数据类型的输出。 PrintWriter和PrintStream的输出不会抛出异常,用户通过检测错误状态获取错误信息。 PrintWriter和PrintStream有自动flush功能。,Print流,PrintWriter(Writer out) PrintWriter(Writer out, boolean autoFlush) PrintWriter(OutputStream out) PrintWriter(OutputStream out

温馨提示

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

评论

0/150

提交评论