资源描述
第5章Java输入输出和网络编程,【学习目标】1了解Java输入/输出流的概念,了解Java中对字节流和字符流的不同处理。,熟悉各种流类的使用,包括如何读写字节文件,如何增加缓冲和读写基本数据类型,如何通过管道读写数据,如何读写类对象等。,熟悉Java中文件和文件处理以及文件的随机访问流等。掌握字符文件的读写。理解缓冲和通道的概念并熟悉其使用。,2了解Java网络编程的基本概念。重点掌握Socket通信编程,包括服务器端Socket和客户端Socket的建立,读写Socket数据流的建立,数据的读写过程和多线程处理等。,5.1Java输入/输出流,5.1.1概述1流的概念(Stream)Java中把这些不同来源和目标的数据都统一抽象为流(Stream),它是同一台计算机中或网络上不同计算机之间有序运动的数据序列。,(a)(b)图5-1输入流和输出流的过程图,2java.io包,图5-2java.io包中字节流父类、字符流父类和文件处理类,InputStream类是所有字节输入流的父类Reader类是所有字符输入流的父类File类是专门用来处理文件的类。RandomAcessFile类实现了文件的随机读写。,(a)(b)图5-3输入流和输出流的过程图,3java.nio包和java.nio.channels包,5.1.2字节文件输入/输出流字节文件输入流FileInputStream是InputStream类的子类,重写了父类的read方法,用来打开文件并以字节的方式从文件读取数据。,1字节文件输入流(FileInputStream)使用下面的构造方法创建文件输入流对象。,publicFileInputStream(Stringname)throwsFileNotFoundException。参数是包含目录和文件名的字符串。publicFileInputStream(Filefile)throwsFileNotFoundException。,使用下面的read方法从输入流中读取字节数据,读到流的末尾返回1,标志着流的结束。,publicintread()throwsIOException。publicintread(byteb)throwsIOException。publicintread(byteb,intoff,intlen)throwsIOException。,关闭流。publicvoidclose()throwsIOException用来关闭流。,2字节文件输出流(FileOutputStream)使用下面的构造方法创建文件输出流对象。,publicFileOutputStream(Stringname)throwsFileNotFoundException。publicFileOutputStream(Filefile)throwsIOException。publicFileOutputStream(Stringname,booleanappend)throwsFileNotFoundException。,使用下面的write方法向文件中写入数据。publicvoidwrite(intb)throwsIOException。publicvoidwrite(byteb)throwsIOException。publicvoidwrite(byteb,intoff,intlen)throwsIOException。,关闭流。publicvoidclose()throwsIOException用来关闭流。,5.1.3增加缓冲和读/写基本数据类型1缓冲字节流(BufferedInputStream和BufferedOutputStream),使用以下构造方法创建缓冲输入流对象。publicBufferedInputStream(InputStreamin)。publicBufferedInputStream(InputStreamin,intsize)。,使用以下构造方法创建缓冲输出流对象。publicBufferedOutputStream(OutputStreamout)。publicBufferedOutputStream(OutputStreamout,intsize)。,2数据流(DataInputStream和DataOutputStream)使用以下构造方法创建数据输入流对象和数据输出流对象。,publicDataInputStream(InputStreamin),创建数据输入流。publicDataOutputStream(OutputStreamout),创建数据输出流。,常用方法。DataInputStream类读数据的方法包括readBoolean()、readChar()、readInt()、readDouble()等。,DataOutputStream类写数据的方法包括writeBoolean(booleanv)、writeChar(intv)、writeInt(intv)、writeDouble(doublev)等。因见名知义,这里没有列出所有方法,可查阅JavaAPI文档。,3打印输出到文件,5.1.4通过管道读/写数据java.io包中提供了两个实现管道通信的类:管道输出流PipedOutputStream类和管道输入流PipedInputStream类。,5.1.5类对象的读/写类ObjectOutputStream可将类对象写入OutputStream,以便保存在文件中或在网络上传输。,1对象输出流(ObjectOutputStream)和写对象publicObjectOutputStream(OutputStreamout)throwsIOException。publicfinalvoidwriteObject(Objectobj)throwsIOException。,2对象输入流(ObjectInputStream)和读对象publicObjectInputStream(InputStreamin)throwsIOException。,publicfinalObjectreadObject()throwsOptionalDataException,ClassNotFoundException,IOException。,5.1.6文件类(File)1创建File对象常用File类的以下构造方法创建File对象。,publicFile(Stringpathname),参数pathname是包含目录和文件名的字符串。Java把目录看作一种特殊的文件,因此该字符串可以没有文件名。,publicFile(Fileparent,Stringchild)。publicFile(Stringparent,Stringchild)。,2获取文件信息和操作文件,5.1.7文件的随机访问(RandomAccessFile)1创建RandomAccessFile类对象使用下面的两个构造方法可以创建RandomAccessFile类对象。,publicRandomAccessFile(Filefile,Stringmode)throwsIOException。publicRandomAccessFile(Stringname,Stringmode)throwsFileNotFoundException。,2控制读写指针publicintskipBytes(intn)throwsIOException,将文件读写指针向后移动n个字节。,publicvoidseek(longpos)throwsIOException,把指针移到指定位置pos。publiclonggetFilePointer()throwsIOException,得到读写指针当前的位置。,3读写数据,5.1.8字符文件的读、写,1读字符文件(FileReader)2写字符文件(FileWriter)3缓冲字符输入流(BufferedReader)4缓冲字符输出流(BufferedWriter),5.1.9缓冲和通道的使用1字节缓冲区类(ByteBuffer)容量表示该缓冲区可以保存多少数据,使用类中的静态方法allocate(intcapacity)可以创建指定容量的缓冲区,其容量永远不会为负并且从不会更改。,极限用来指明不能对超过该值的缓冲区数据项进行操作,它是个非负整数,不能大于缓冲区的容量值。位置是指下一个要读取或写入的元素的索引。标记与前面讲过的类似,用mark()做标记,用reset()重新回到标记位置。,2文件通道(FileChannel),5.2Java网络编程,5.2.1概述1InetAddress类Java网络包中的InetAddress类是Java中的IP地址封装类,常用下面的方法获取IP地址。,publicstaticInetAddressgetByName(Stringhost)throwsUnknownHostException。publicStringgetHostAddress()。,2服务器和客户机3端口号,5.2.2Socket通信1Socket通信简介在分布处理过程中,客户机/服务器的Socket通信,也称为套接字通信,是基于Socket连接的网络通信模式。,图5-5基于连接的网络通信模式,2Socket类使用以下构造方法创建连接到指定服务器的客户端套接字(Socket类)对象。,publicSocket(Stringhost,intport)throwsunknownHostException,IOException。publicSocket(InetAddresshost,intport)throwsIOException。,使用Socket类的以下方法从套接字中读取数据和向套接字中写入数据。publicInputStreamgetInputStream()throwsIOException。publicOutputStreamgetOutputStream()throwsIOException。,3ServerSocket类使用以下构造方法创建.ServerSocket类对象。,publicServerSocket(intport)throwsIOException。publicServerSocket(intport,intbacklog)throwsIOException。,使用ServerSocket类的方法accept()打开Socket,然后可以从套接字中读取数据或向套接字中写入数据。,5.2.3UDP数据报通信1UDP数据报通信简介2DatagramSocket类使用以下构造方法创建收、发数据报的Socket对象。,publicDatagramSocket()throwsSocketException,自动指定一个可用的端口号。publicDatagramSocket(intport)throwsSocketException,参数port指定端口号。,发送数据报和接收数据报。publicvoidsend(DatagramPacketp)throwsIOException,发送数据报。publicvoidreceive(DatagramPacketp)throwsIOException,接收数据报。,3DatagramPacket类使用下面的构造方法创建DatagramPacket类对象作为数据的载体。,publicDatagramPacket(bytebuf,intlength)publicDatagramPacket(bytebuf,intlength,InetAddressaddress,intport),下面是DatagramPacket类的常用方法。publicInetAddressgetAddress(),得到存放在数据报中的IP地址。,publicintgetPort(),得到存放在数据报中的端口号。publicbytegetData(),得到存放在数据报中的数据。,publicintgetLength(),得到数据报中的数据长度。publicvoidsetData(bytebuf),设置数据报中的数据内容。,5.2.4使用Socket通信实现简单聊天室1聊天室图形界面类(ChatPanel),图5-6例5.13程序ChatPanel的运行效果,2聊天室服务器端(ChatServer类)3聊天室客户端(ChatClient类),
展开阅读全文