《java程序设计之网络编程》输入输出处理、线程ppt

上传人:tia****nde 文档编号:70536054 上传时间:2019-01-17 格式:PPT 页数:122 大小:1.12MB
返回 下载 相关 举报
《java程序设计之网络编程》输入输出处理、线程ppt_第1页
第1页 / 共122页
《java程序设计之网络编程》输入输出处理、线程ppt_第2页
第2页 / 共122页
《java程序设计之网络编程》输入输出处理、线程ppt_第3页
第3页 / 共122页
《java程序设计之网络编程》输入输出处理、线程ppt_第4页
第4页 / 共122页
《java程序设计之网络编程》输入输出处理、线程ppt_第5页
第5页 / 共122页
点击查看更多>>
资源描述

《《java程序设计之网络编程》输入输出处理、线程ppt》由会员分享,可在线阅读,更多相关《《java程序设计之网络编程》输入输出处理、线程ppt(122页珍藏版)》请在金锄头文库上搜索。

1、Java程序设计之网络编程,计算机学院,教学课件,第9章 输入输出处理,主要内容,9.1 I/O流的概念和划分 9.2 文件的操作 9.3 字节流处理 9.4 字符流处理 9.5 串行化,9.1 I/O流的概念和划分,数据流(Stream)是一组有顺序的、有起点和终点的字节集合,是对输入和输出的总称和抽象。 Java程序通过流来完成输入/输出。流通过Java的输入/输出系统与物理设备链接。,Stream:流,Java程序通过流来完成输入/输出。流通过Java的输入/输出系统与物理设备连接。尽管与它们链接的物理设备不尽相同,所有流的行为具有同样的方式。这样,相同的输入/输出类和方法适用于所有类型

2、的外部设备。这意味着一个输入流能够抽象多种不同类型的输入:从磁盘文件,从键盘或从网络套接字。同样,一个输出流可以输出到控制台,磁盘文件或相连的网络。流是处理输入/输出的一个简便的方法。,Java 2 定义了两种类型的流:字节类和字符类。字节流(byte stream)为处理字节的输入和输出提供了方便的方法。例如使用字节流读取或书写二进制数据。字符流(character stream)为字符的输入和输出处理提供了方便。它们采用了统一的编码标准,因而可以国际化。在某些场合,字符流比字节流更有效。 需要声明:在最底层,所有的输入/输出都是字节形式的。基于字符的流只为处理字符提供方便有效的方法。,Ja

3、va流的划分,字节流类 处理字节的输入和输出提供了方便的方法 字符流类 为字符的输入和输出处理提供了方便 读写数据的单位不同 最主要的是Read() 和Write() 方法 每个流的特点,InputStream,1. int read() 从输入流中读取下一个字节,返回范围在0到255之间的一个整数,该方法的属性为abstract,必须为子类所实现。 2. int read(byte ) 从输入流中读取长度为b1ength的数据,写入字节数组b,并返回读取的字节数。 3. int read(byte, int off,int len) 从输入流中读取长度为len的数据,写入字节数组b中从索引o

4、ff开始的位置,并返回读取的字节数。 对于以上方法,如果到达流的末尾位置,则返回-1表明流的结束。 这三个方法提供对输入管道数据的存取。简单读方法返回一个int值,它包含从流里读出的一个字节或者-1,其中后者表明文件结束。其它两种方法将数据读入到字节数组中,并返回所读的字节数。第三个方法中的两个int参数指定了所要填入的数组的子范围。,4. void close() 你完成流操作之后,就关闭这个流。如果你有一个流所组成的栈,使用过滤器流,就关闭栈顶部的流。这个关闭操作会关闭其余的流。 5. int available() 这个方法报告立刻可以从流中读取的字节数。在这个调用之后的实际读操作可能返

5、回更多的字节数。 6. skip(long) 这个方法丢弃了流中指定数目的字符。 7. boolean markSupported() 确定输入流是否支持方法mark()和reset()。 8. void mark(int) 在输入流的当前读取位置作标记。从该位置开始读取readlimit所指定的数据后,标记失 效。,9. void reset() 重置输入流的读取位置为方法mark()所标记的位置。 如果流支持“回放”操作,则这些方法可以用来完成这个操作。如果mark()和reset()方法可以在特定的流上操作,则markSupported()方法将返回true。mark(int)方法用来指

6、明应当标记流的当前点和分配一个足够大的缓冲区,它最少可以容纳参数所指定数量的字符。在随后的read()操作完成之后,调用reset()方法来返回你标记的输入点。 从以上方法中可以看到,InputStream中主要提供了对数据读取的基本支持,其中的方法 通常都需要在子类中被重写,以提高效率或是适合于特定流的需要。,OutputStream,1. void write(int) 将指定的字节b写入输出流。该方法的属性为abstract,必须为子类所实现。 注意:参数中的b为int类型,如果b的值大于255,则只输出它的低位字节所表示的值。 2. void write(byte b) 把字节数组b中

7、的b.length个字节写入输出流。 3. void write(byte b, int off, int len) 把字节数组b中从索引off开始的len个字节写入输出流。 这些方法写输出流。和输入一样,总是尝试以实际最大的块进行写操作。,4. void close() 当你完成写操作后,就关闭输出流。如果你有一个流所组成的栈,就关闭栈顶部的流。这个关闭操作会关闭其余的流。 5. void flush() 有时一个输出流在积累了若干次之后才进行真正的写操作。flush( )方法允许你强制执行写操作。,FileInputStream和FileOutputStream 这些类是结点流,而且正如这

8、个名字所暗示的那样,它们使用磁盘文件。这些类的构造函数允许你指定它们所连接的文件。要构造一个FileInputStream,所关联的文件必须存在而且是可读的。如果你要构造一个FileOutputStream而输出文件已经存在,则它将被覆盖。 FileInputStream infile =new FileInputStream(“myfile.dat“); FileOutputStream outfile =new FileOutputStream(“results.dat“); infile.read(); outfile.write();,下面举例:,BufferInputStream和B

9、ufferOutputStream 这些是过滤器流,它们可以提高I/O操作的效率。 BufferInputStream bi=new BufferInputStream(infile); BufferOutputStream bo=new BufferOutputStream(outfile); bi.readLine();,DataInputStream和DataOutputStream 一个类实现接口Datalnput和DataOutput中定义的方法后,就可以用与机器无关的格式读/写Java的基本类型数据。类DataInputStream、DataOutputStream和RandomA

10、ccessFile分别实现了这两个接口。这些过滤器通过流来读写Java基本类。例如: DataInputStream方法 byte readByte() long readLong() double readDouble() DataOutputStream方法 void writeByte(byte) void writeLong(long) void writeDouble(double) 注意DataInputStream和DataOutputStream的方法是成对的。 这些流都有读写字符串的方法,但不应当使用这些方法。它们已经被后面所讨论的读者和作者所取代。,PipedInputSt

11、ream和PipedOutputStream 管道流用来在线程间进行通信。一个线程的PipedInputStream对象从另一个线程的PipedOutputStream对象读取输入。要使管道流有用,必须有一个输入方和一个输出方。,例9-1: 下面的程序实现文件内容的显示。,import java.io.*; class Display public static void main(String args)throws FileNotFoundException,IOException FileInputStream fis=new FileInputStream(“text”); Buffe

12、redInputStream bfis=new BufferedInputStream(fis); int b; while(b=bfis.read()!=-1 System.out.print(b); bfis.close(); ,/BufferedInputDemo.Java,class BufferedInputDemo public static void main(String args) BufferedInputStream bis = new BufferedInputStream( new FileInputStream(“BufferedInputDemo.Java”);

13、int b; try while(b=bis.read()!=-1) System.out.println(char)b); catch(IOException e) e.printStackTrace(); ,Unicode,Java技术使用Unicode来表示字符串和字符,而且它提供了16位版本的流,以便用类似的方法来处理字符。这些16位版本的流称为读者Reader和作者Writer。和流一样,它们都在java.io包中。 最重要的是InputStreamReader和OutputStreamWriter。这些类用来作为字节流与读者和作者之间的接口。 当你构造一个InputStreamRe

14、ader或OutputStreamWriter时,转换规则定义了16位Unicode和其它平台的特定表示之间的转换。,Reader的例子,import java.io.*; public class CharInput public static void main (String args) throws IOException String s; InputStreamReader ir; BufferedReader in; ir = new InputStreamReader(System.in); in = new BufferedReader(ir); while (s = in.

15、readLine() != null) System.out.println(“Read: “ + s); ,字节流输入类,字节输出类,字符输入流类,字符输出流,主要内容,9.1 I/O流的概念和划分 9.2 文件的操作 9.3 字节流处理 9.4 字符流处理 9.5 串行化,7.2 文件的操作,File类:对文件的引用和表示 File类提供了一些方法来操纵文件和获取文件的信息。对于目录,Java把它当作一种特殊类型的文件,即文件名单列表。 File类直接处理文件和文件系统。通过File类的方法,可以得到文件或者目录的描述信息,包括名称、所在路径、读写性、长度等,还可以创建目录、创建文件,改变

16、文件名、删除文件、列出目录中的文件等。,File对象的构造,File(String path) File(String dir, String filename) File(File dir, String filename) File(URI uri),File f1 = new File(“D:/Java“); File f2 = new File(“D:/Java“,“test.txt“); File f3 = new File(f1,“test.txt“); File f4 = new File(“file:/D:/Java/test.txt“);,File类的方法,boolean canRead()测试文件是否可读 boolean delete()删除文件 File getAbsoluteFile()返回绝对文件名 File getAbsoluteFile()返回绝对文件名 boolean isDirectory()是否是目录

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

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