书签 分享 收藏 举报 版权申诉 / 88
上传文档赚钱

类型《Java程序设计教程》课件第十一章:输入输出流.pptx

  • 上传人(卖家):momomo
  • 文档编号:7669046
  • 上传时间:2024-06-23
  • 格式:PPTX
  • 页数:88
  • 大小:4.10MB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《《Java程序设计教程》课件第十一章:输入输出流.pptx》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    Java程序设计教程 Java 程序设计 教程 课件 第十一 输入输出
    资源描述:

    1、本章学习目标:掌握File类的使用 掌握IO流的分类和体系结构 掌握字符流和字节流的使用 了解对象流和过滤流的使用 了解NIO的特点并掌握Buffer和Channel的使用第十一章第十一章 输入输入/输出流输出流第第1 1节节partI/O流概述 流是一组有序的数据序列,是实现数据输入(Input)和输出(Output)的基础,可以对数据实现读/写操作。流(Stream)的优势在于使用统一的方式对数据进行操作或传递,简化了代码操作。按照不同的分类方式,可以将流分为不同的类型。按照流的流向来分,可以将流分为输入流和输出流。输入流是只能读取数据,而不能写入数据的流;输出流是只能写入数据,而不能读取

    2、数据的流,如图11.1所示。I/O流概述I/O流概述 按照流所操作的基本数据单元来分,可以将流分为字节流和字符流。字节流所操作的基本数据单元是8位的字节(byte),无论是输入还是输出,都是直接对字节进行处理;字符流所操作的基本数据单元是16位的字符(Unicode),无论是输入还是输出,都是直接对字符进行处理。按照流的角色来分,可以将流分为节点流和处理流。节点流用于从或向一个特定的IO设备(如磁盘、网络等)读/写数据的流,也称为低级流,通常是指文件、内存或管道;处理流用于对一个已经存在的流进行连接或封装,通过封装后的流来实现数据的读/写功能,也称为高级流或包装流。I/O流概述 Java的IO

    3、流都是由4个抽象基类派生的,如图11.2所示。I/O流概述 其中:InputStream/Reader是所有输入流的基类,用于实现数据的读操作,前者是字节输入流,后者是字符输入流,只是处理的数据基本单位不同;OutputStream/Writer是所有输出流的基类,用于实现数据的写操作,前者是字节输出流,后者是字符输出流,只是处理的数据基本单位不同。Java的IO流体系比较复杂,共涉及40多个类,这些类彼此之间相互联系,与有一定的规律。Java按照功能将IO流分成了许多类,而每个类中又分别提供了字节输入流、字节输出流、字符输入流和字符输出流。当然有些流没有提供字节流,有些流没有提供字符流。Ja

    4、va的IO流体系按照功能分类,常用的流如表11-1所示。其中,访问文件、数组、管道和字符串的流都是节点流,必须直接与指定的物理节点关联。I/O流概述 由于计算机中所有的数据都是以二进制的形式进行组织,而字节流可以处理所有二进制文件,所以通常字节流的功能比字符流的功能更强大。但是,如果使用字节流处理文本文件时,则需要使用合适的方式将字节转换成字符,从而增加了编程的复杂度。因此,在使用IO流时注意一个规则:如果进行输入输出的内容是文本内容,则使用字符流;如果输入输出的内容是二进制内容,则使用字节流。I/O流概述第第2 2节节partFile类File类 File类是java.io包下代表与平台无关

    5、的文件和目录,也就是说,如果希望在程序中操作文件和目录,都可以通过File类来完成。File类中的方法可以实现文件和目录的创建、删除和重命名等,但File类不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。File类可以使用文件路径字符串来创建File实例,该文件路径字符串既可以是绝对路径,也可以是相对路径。绝对路径是从根目录开始,对文件进行完整描述,例如“D:dataxsc.txt”;相对路径是以当前目录为参照,对文件进行描述,例如“dataxsc.txt”。File类File类 File类常用方法及功能如表11-2所示。File类下述案例示例了文件的创建以及对文件进行

    6、操作和管理的应用,代码如下所示。【代码11.1】FileExample.javapackage com;import java.io.File;import java.io.IOException;public class FileExample public static void main(String args)File newFile=new File(D:data);System.out.println(创建目录:+newFile.mkdir();/以当前路径来创建一个File对象,File file=new File(D:data,xsc.txt);try file.createN

    7、ewFile();/创建文件 catch(IOException e)e.printStackTrace();File类if(file.exists()System.out.println(该文件已存在);System.out.println(文件名称为:+file.getName();System.out.println(文件绝对路径为:+file.getAbsolutePath();System.out.println(文件上一级路径为:+file.getParent();/file.delete();/删除该文件 /使用list()方法来列出当前路径下的所有文件和路径 String fi

    8、leList=newFile.list();System.out.println(=当前路径下所有文件和路径如下=);for(String fileName:fileList)System.out.println(fileName);File类程序运行结果如下:创建目录:true该文件已存在文件名称为:xsc.txt文件绝对路径为:D:dataxsc.txt文件上一级路径为:D:data=当前路径下所有文件和路径如下=xsc.txt 注意:在Windows操作系统下,路径的分隔符使用反斜杠“”,而Java程序中的单反斜杠表示转义字符,所以路径分割符需要使用双反斜杠。第第3 3节节part字节流

    9、 字节流所处理的数据基本单元是字节,其输入/输出操作都是在字节的基础上进行。字节流的两个抽象基类是InputStream和OutputStream,其他字节流都是由这两个抽象类派生的。字节流本节概述11.3.1InputStream InputStream是字节输入流,使用InputStream可以从数据源以字节为单位进行读取数据。InputStream类中的常用方法如表11-3所示。InputStream11.3.1InputStream InputStream类是抽象类,不能直接实例化,因此使用其子类来完成具体功能。InputStream类及其子类的关系如图11.3所示。11.3.1Inp

    10、utStream InputStream常见子类及其功能描述如表11-4所示。下述案例示例了FileInputStream读文件内容,代码如下所示。11.3.1InputStream【代码11.2】FileInputStreamExample.javapackage com;import java.io.FileInputStream;import java.io.IOException;public class FileInputStreamExample public static void main(String args)/声明文件字节输入流FileInputStream fis=nu

    11、ll;try/实例化文件字节输入流fis=new FileInputStream(D:dataxsc.txt);/创建一个长度为1024的字节数组作为缓冲区byte bbuf=new byte1024;/用于保存实际读取的字节数int hasRead=0;/使用循环重复读文件中的数据while(hasRead=fis.read(bbuf)0)/将缓冲区中的数据转换成字符串输出System.out.print(new String(bbuf,0,hasRead);11.3.1InputStream catch(IOException e)e.printStackTrace();finally t

    12、ry/关闭文件输入流fis.close();catch(IOException e)e.printStackTrace();上述代码使用FileInputStream中的read()方法循环从文件中读取数据并输出。在读文件操作时,可能会发生IOException,因此需要将代码放在trycatch异常处理语句中。最后在finally块中,使用close()方法将文件输入流关闭,从而释放资源。11.3.2OutputStream OutputStream是字节输出流,使用OutputStream可以往数据源以字节为单位写入数据。OutputStream常用方法如表11-5所示。OutputStr

    13、eam11.3.2OutputStream OutputStream类和InputStream类一样,都是抽象类,不能直接实例化,因此也是使用其子类来完成具体功能。OutputStream类及其子类的关系如图11.4所示。11.3.2OutputStream OutputStream常见子类及其功能描述如表11-4所示。下述案例示例了使用FileOutputStream类将用户输入写到指定文件中。代码如下所示。11.3.2OutputStream【代码11.3】FileOutputStreamExample.javapackage com;import java.io.FileOutputSt

    14、ream;import java.io.IOException;import java.util.Scanner;public class FileOutputStreamExample public static void main(String args)/建立一个从键盘接收数据的扫描器Scanner scanner =new Scanner(System.in);/声明文件字节输出流FileOutputStream fos=null;try/实例化文件字节输出流fos=new FileOutputStream(D:dataxsc.txt);System.out.println(请输入内容

    15、:);String str=scanner.nextLine();/将数据写入文件中fos.write(str.getBytes();System.out.println(已保存!);catch(IOException e)11.3.2OutputStreame.printStackTrace();finally try/关闭文件输出流fos.close();scanner.close();catch(IOException e)e.printStackTrace();上述代码使用FileOutputStream的write()方法将用户从键盘输入的字符串保存到文件中,因write()方法不能

    16、直接写字符串,所以要先使用getBytes()方法将字符串转换成字节数组后在写到文件中。最后在finally块中,使用close()方法将文件输出流关闭并释放资源。11.3.2OutputStream 程序运行结果如下所示:请输入内容:我喜欢输入输出流内容的学习!已保存!上面运行结果中用户输入的“我喜欢输入输出流内容的学习!”,将保存到“D:dataxsc.txt”文件中。如果D盘不存在D:dataxsc.txt文件,程序会先创建一个,再将输入内容写入文件;如果该文件已存在,则先清空原来文件中的内容,再写入新的内容。第第4 4节节part字符流 字符流所处理的数据基本单元是字符,其输入/输出操

    17、作都是在字符的基础上进行。Java语言中的字符采用Unicode字符编码,每个字符占两个字节空间,而文本文件有可能采用其他类型的编码,如GBK和UTF-8编码方式,因此在Java程序中使用字符流进行操作时,需要注意字符编码方式之间的转换。字符流的两个抽象基类是Reader和Writer,其他字符流都是由这两个抽象类派生的。字 符 流本节概述11.4.1Reader Reader是字符输入流,用于从数据源以字符为单位进行读取数据。Reader类中常用方法及功能描述如表11.5所示。Reader11.4.1Reader Reader类是抽象类,不能直接实例化,因此使用其子类来完成具体功能。Read

    18、er类及其子类的关系如图11.5所示。11.4.1Reader Reader类常用子类及其功能描述如表11.6所示。下述案例示例了使用FileReader和BufferedReader读取文件的内容并输出,代码如下所示。11.4.1Reader【代码11.4】ReaderExample.javapackage com;import java.io.BufferedReader;import java.io.FileReader;public class ReaderExample public static void main(String args)/声明一个BufferedReader流的

    19、对象BufferedReader br=null;try/实例化BufferedReader流,连接FileReader流用于读文件br=new BufferedReader(new FileReader(D:dataxsc.txt);String result=null;/循环读文件,一次读一行while(result=br.readLine()!=null)/输出System.out.println(result);catch(Exception e)e.printStackTrace();finally 11.4.1Readertry/关闭缓冲流br.close();catch(Exce

    20、ption ex)ex.printStackTrace();上述代码中,首先声明了一个BufferedReader类型的对象,在实例化该缓冲字符流时创建一个FileReader流作为BufferedReader构造方法的参数,如此两个流就连接在一起,可以对文件进行操作;然后使用BufferedReader的readLine()方法一次读取文件中的一行内容,循环读文件并显示。BufferedReader类中readLine()方法是按行读取,当读取到流的末尾时返回null,所以可以根据返回值是否为null来判断文件是否读取完毕。11.4.2Writer Reader是字符输入流,用于从数据源以字

    21、符为单位进行读取数据。Reader类中常用方法及功能描述如表11.5所示。Writer11.4.2Writer Writer类是抽象类,不能直接实例化,因此使用其子类来完成具体功能。Writer类及其子类的关系如图11.6所示。下述案例示例了使用FileWriter将用户输入的数据写入指定的文件中,代码如下所示。11.4.2Writer【代码11.5】WriterExample.javapackage com;import java.io.FileWriter;import java.io.IOException;import java.util.Scanner;public class Wr

    22、iterExample public static void main(String args)/建立一个从键盘接收数据的扫描器Scanner scanner =new Scanner(System.in);/声明文件字符输出流FileWriter fw=null;try/实例化文件字符输出流fw=new FileWriter(D:dataxsc.txt);System.out.println(请输入内容:);String str=scanner.nextLine();/将数据写入文件中fw.write(str);System.out.println(已保存!);catch(IOExcepti

    23、on e)11.4.2Writere.printStackTrace();finally try/关闭文件字符输出流fw.close();scanner.close();catch(IOException e)e.printStackTrace();程序运行结果如下所示:请输入内容:我们努力学习FileWriter类的应用!已保存!第第5 5节节part过滤器和转换器11.5.1过 滤 流 过滤流用于对一个已有的流进行连接和封装处理,以更加便利的方式对数据进行读/写操作。过滤流又分为过滤输入流和过滤输出流。FilterInputStream为过滤输入流,该类的子类如图11.7所示。过滤流11.

    24、5.1过 滤 流 FilterInputStream各个子类的功能描述如表11-8所示。下述案例示例了BufferedInputStream类的使用,代码如下所示。11.5.1过 滤 流【代码11.6】BufferedInputStreamExample.javapackage com;import java.io.BufferedInputStream;import java.io.FileInputStream;public class BufferedInputStreamExample public static void main(String args)/定义一个BufferedI

    25、nputStream类型的变量BufferedInputStream bi=null;try/利用FileInputStream对象创建一个输入缓冲流bi=new BufferedInputStream(new FileInputStream(D:dataxsc.txt);int result=0;/循环读数据while(result=bi.read()!=-1)/输出System.out.print(char)result);catch(Exception e)e.printStackTrace();finally 11.5.1过 滤 流try/关闭缓冲流bi.close();catch(E

    26、xception ex)ex.printStackTrace();11.5.1过 滤 流 FilterOutputStream类为过滤输出流,其子类的层次关系如图11.8所示。FilterOutputStream类各个子类的功能如表11-9所示。11.5.1过 滤 流下述案例演示了PrintStream打印流的使用,代码如下所示。【代码11.7】PrintStreamExample.javapackage com;import java.io.FileOutputStream;import java.io.IOException;import java.io.PrintStream;publi

    27、c class PrintStreamExample public static void main(String args)String line=使用PrintStream过滤流写数据;try PrintStream ps=new PrintStream(new FileOutputStream(D:dataxsc.txt);/使用PrintStream打印一个字符串ps.println(line);catch(IOException e)e.printStackTrace();上述代码创建一个PrintStream打印流,并与FileOutputStream连接,往文件中写入数据。11.

    28、5.2转换流 Java的IO流体系中提供了两个转换流:InputStreamReader:将字节输入流转换成字符输入流。OutputStreamWriter:将字符输出流转换成字节输出流。下述案例示例了转换流的使用,以InputStreamReader为例,将键盘System.in输入的字节流转换成字符流。代码如下所示。转换流11.5.2转换流【代码11.8】InputStreamReaderExample.javapackage com;import java.io.BufferedReader;import java.io.IOException;import java.io.InputS

    29、treamReader;public class InputStreamReaderExample public static void main(String args)try(/将Sytem.in标准输入流InputStream字节流转换成Reader字符流InputStreamReader reader=new InputStreamReader(System.in);/将普通Reader包装成BufferedReaderBufferedReader br=new BufferedReader(reader)String line=null;/采用循环方式来一行一行的读取while(li

    30、ne=br.readLine()!=null)/如果读取的字符串为退出,程序退出if(line.equals(退出)System.exit(0);11.5.2转换流/打印读取的内容System.out.println(输入内容为:+line);catch(IOException e)e.printStackTrace();上述代码使用InputStreamReader转换流将System.in标准输入流InputStream字节流转换成Reader字符流,再将普通Reader包装成BufferedReader。BufferedReader流具有缓冲功能,一次可以读一行文本。第第6 6节节par

    31、t对象流 在Java中,使用对象流可实现对象的序列化和反序列化操作。对 象 流本节概述 11.6.1对象序列化与反序列化 对象的序列化(Serialize)是指将对象数据写到一个输出流中的过程;而对象的的反序列化是指从一个输入流中读取一个对象。将对象序列化后会转换成与平台无关的二进制字节流,从而允许将二进制字节流持久地保存在磁盘上,或通过网络将二进制字节流传输到另一个网络节点;其他程序从磁盘或网络中获取这种二进制字节流,并将其反序列化后恢复成原来的Java对象。对象序列化与反序列化11.6.1对象序列化与反序列化 对象序列化具有以下两个特点:对象序列化可以在分布式应用中进行使用,分布式应用需要

    32、跨平台、跨网络,因此要求所有传递的参数、返回值都必须实现序列化;对象序列化不仅可以保存一个对象的数据,而且通过循环可以保存每个对象的数据。对象序列化和反序列化过程如图11.9所示。11.6.1对象序列化与反序列化 在Java中,如果需要将某个对象保存到磁盘或通过网络传输,则该对象必须是可以序列化的(serializable)。一个类的对象是可序列化的,则该类必须实现java.lang包下的Serializable接口或Externalizable接口。Java中的很多类已经实现了Serializable接口,该接口只是一个标志接口,接口中没有任何的方法。实现Serializable接口时无须实

    33、现任何方法,它只是用于表明该类的实例对象是可以序列化的。只有实现Serializable接口的对象才可以利用序列化工具保存和复原。11.6.2ObjectInputStream和ObjectOutputStream ObjectOutputStream是OutputStream的子类,该类也实现了ObjectOutput接口,其中ObjectOutput接口支持对象序列化。该类的一个构造方法如下:ObjectOutputStream(OutputStream outStream)throws IOException 其中参数outStream是被写入序列化对象的输出流。ObjectOutput

    34、Stream类的常用方法及其功能如表11-10所示。ObjectInputStream和ObjectOutputStream11.6.2ObjectInputStream和ObjectOutputStream下述案例定义了一个可以序列化的实体类,代码如下所示。【代码11.9】Person.javapackage com;import java.io.Serializable;public class Person implements Serializable String name;int age;String address;public Person(String name,int ag

    35、e,String address)this.name=name;this.age=age;this.address=address;11.6.2ObjectInputStream和ObjectOutputStream下述案例使用ObjectOutputStream类示例了对对象的序列化过程,代码如下所示。【代码11.10】ObjectOutputStreamExample.javapackage com;import java.io.FileOutputStream;import java.io.ObjectOutputStream;public class ObjectOutputStrea

    36、mExample public static void main(String args)/创建一个ObjectOutputStream对象输出流try(ObjectOutputStream obs=new ObjectOutputStream(new FileOutputStream(D:dataxsc.txt)/创建一个Person类型的对象Person person=new Person(李飞,20,重庆);/把对象写入到文件中obs.writeObject(person);obs.flush();System.out.println(序列化完毕!);catch(Exception ex

    37、)ex.printStackTrace();11.6.2ObjectInputStream和ObjectOutputStream 上述代码中,首先创建了一个ObjectOutputStream类型的对象,其中创建一个FileOutputStream类型的对象作为ObjectOutputStream构造方法的参数,然后创建了一个Person类型的对象,在利用ObjectOutputStream对象的writeObject()方法将对象写入到文件中。ObjectInputStream是InputStream的子类,该类也实现了ObjectInput接口,其中ObjectInput接口支持对象序列化

    38、。该类的一个构造方法如下:ObjectInputStream(InputStream inputStream)throws IOException 其中inputStream参数是读取序列化对象的输入流。ObjectInputStream类的常用方法及其功能如表11-11所示。11.6.2ObjectInputStream和ObjectOutputStream下述案例使用ObjectInputStream类示例了反序列化对象的过程,代码如下所示。【代码11.11】ObjectInputStreamExamplejavapackage com;import java.io.FileInputSt

    39、ream;import java.io.ObjectInputStream;public class ObjectInputStreamExample public static void main(String args)/创建一个ObjectInputStream对象输入流try(ObjectInputStream ois=new ObjectInputStream(new FileInputStream(D:dataxsc.txt)/从ObjectInputStream对象输入流中读取一个对象,并强制转换成Person对象Person person=(Person)ois.readObj

    40、ect();System.out.println(反序列化完毕!读出的对象信息如下:);System.out.println(姓名:+person.name);System.out.println(年龄:+person.age);System.out.println(地址:+person.address);catch(Exception ex)ex.printStackTrace();11.6.2ObjectInputStream和ObjectOutputStream 上述代码首先创建了一个ObjectInputStream类型的对象输入流,并连接一个FileInputStream文件输入流,

    41、对文件“D:dataxsc.txt”进行读取操作;再利用readObject()方法从文件中读取一个对象并强制转换成Person对象;最后将读取的Person对象信息输出。第第6 6节节partNIO Java传统的IO流都是通过字节的移动进行处理的,即使不是直接去处理字节流,但其底层的实现还是依赖于字节处理。因此,Java传统的IO流一次只能处理一个字节,从而造成系统的效率不高。从JDK 1.4开始,Java提供了一系列改进功能的IO流,这些新的功能IO流被统称为NIO(New IO,新IO)。NIO新增的类都放在java.nio包及子包下,这些新增的类对原来java.io包中的很多类都进行

    42、了改写,以满足NIO的功能需要。N I O本节概述11.7.1NIO概述 NIO和传统的IO有相同的目的,都是用于数据的输入/输出,但NIO采用了内存映射文件这种与原来不同的方式来处理输入/输出操作。NIO将文件或文件的一段区域映射到内存中,这样可以像访问内存一样来访问文件了。Java中与NIO相关的有以下几个包:java.nio包:主要包含各种与Buffer(缓冲)相关的类;java.nio.channels包:主要包含与Channel(通道)和Selector相关的类;java.nio.charset包:主要包含与字符集相关的类;java.nio.channels.spi包:主要包含与Ch

    43、annel相关的服务提供者编程接口;java.nio.charset.spi包:主要包含与字符集相关的服务提供者编程接口。NIO概述11.7.1NIO概述 Buffer和Channel是NIO中两个核心对象:Buffer可以被理解成一个容器,其本质是一个数组,往Channel中发送或读取的对象都必须先放到Buffer中。Channel是对传统的IO系统的模拟,在NIO系统中所有数据都需要经过通道传输。Channel与传统的InputStream、OutputStream最大的区别是提供一个map()方法,通过该方法可以直接将一块数据映射到内存中。传统的IO是面向流的处理,而NIO则是面向块的处

    44、理。除了Buffer和Channel之外,NIO还提供了用于将Unicode字符串映射成字节序列以及映射操作的Charset类,也提供了支持非阻塞方式的Selector类。11.7.2Buffer NIO和传统的IO有相同的目的,都是用于数据的输入/输出,但NIO采用了内存映射文件这种与原来不同的方式来处理输入/输出操作。NIO将文件或文件的一段区域映射到内存中,这样可以像访问内存一样来访问文件了。Java中与NIO相关的有以下几个包:java.nio包:主要包含各种与Buffer(缓冲)相关的类;java.nio.channels包:主要包含与Channel(通道)和Selector相关的类

    45、;java.nio.charset包:主要包含与字符集相关的类;java.nio.channels.spi包:主要包含与Channel相关的服务提供者编程接口;java.nio.charset.spi包:主要包含与字符集相关的服务提供者编程接口。Buffer11.7.2Buffer Buffer是一个抽象类,其最常使用的子类是ByteBuffer,用于在底层字节数组上进行get/set操作。除了布尔类型之外,其他基本数据类型都有对应的Buffer类,例如,CharBuffer、ShortBuffer、IntBuffer等。这些Buffer类都没有提供构造方法,而是通过下面一个静态方法来获得一个

    46、Buffer对象:Static XxxBuffer allocate(int capacity):/创建一个指定容量的XxxBuffer对象 通常使用最多的是ByteBuffer和CharBuffer,而其他Buffer则很少使用。其中,ByteBuffer类还有一个名为“MappedByteBuffer”的子类,用于表示Channel将磁盘文件的部分或全部内容映射到内存中所得到的结果,通常MappedByteBuffer对象由Channel的map()方法返回。使用Buffer类时涉及到容量(Capacity)、界限(limit)和位置(position)三个概念。其中容量是该Buffer的

    47、最大数据容量,创建后不能改变;界限是第一个不应该被读出或者写入的缓冲区位置索引,位于limit后的数据既不能被读,也不能被写;位置是用于指明下一个可以被读出或者写入的缓冲区位置索引。11.7.2Buffer Buffer还支持一个可选的标记mark,Buffer允许直接将position定位到该mark处。Capacity、limit、position和mark这些值之间满足以下关系:0=mark=position=limit=capacity Buffer读入数据后如图11.10所示。11.7.2Buffer Buffer常用的方法如表11-12所示。11.7.2Buffer下述案例示例了B

    48、uffer的使用,代码如下所示。【代码11.12】NIOBufferExample.javapackage com;import java.nio.CharBuffer;public class NIOBufferExample public static void main(String args)/创建一个容量为8的CharBuffer缓冲区对象CharBuffer buff=CharBuffer.allocate(8);/获取缓冲区的容量、界限和位置System.out.println(capacity:+buff.capacity();System.out.println(limit:

    49、+buff.limit();System.out.println(position:+buff.position();/使用put()方法向CharBuffer对象中放入元素buff.put(a);buff.put(b);buff.put(c);System.out.println(加入三个元素后,position=+buff.position();/调用flip()方法反转缓冲区buff.flip();/System.out.println(执行flip()后,limit=+buff.limit();System.out.println(position=+buff.position();1

    50、1.7.2Buffer/取出第一个元素System.out.println(第一个元素(position=0):+buff.get();System.out.println(取出一个元素后,position=+buff.position();/调用clear()方法清除缓冲区buff.clear();System.out.println(执行clear()后,limit=+buff.limit();System.out.println(执行clear()后,position=+buff.position();/根据索引获取数据System.out.println(执行clear()后,缓冲区内

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:《Java程序设计教程》课件第十一章:输入输出流.pptx
    链接地址:https://www.163wenku.com/p-7669046.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库