java概述课件19二进制

上传人:pia****nwu 文档编号:245541852 上传时间:2024-10-09 格式:PPT 页数:29 大小:213.50KB
返回 下载 相关 举报
java概述课件19二进制_第1页
第1页 / 共29页
java概述课件19二进制_第2页
第2页 / 共29页
java概述课件19二进制_第3页
第3页 / 共29页
点击查看更多>>
资源描述
,Click to edit Master title style,Click to edit Master text styles,Second Level,Third Level,Fourth Level,Fifth Level,*,Click to edit Master title style,Click to edit Master text styles,Second Level,Third Level,Fourth Level,Fifth Level,Liang,Introduction to Java Programming,Eighth Edition,(c)2011 Pearson Education,Inc.All rights reserved.0132130807,*,1,第19章 二进制I/O,2,引言,在文本文件中存储的数据是以我们能读懂的方式表示的。而在二进制文件中存储的数据使用二进制形式表示的。我们是读不懂二进制文件的,因为它们是为了让程序来读取而设计的。例如java源文件存储在文本文件中,可以使用文本编译器来阅读,但是,java类存储在二进制文件中,可以被java虚拟机阅读。二进制文件的优势在于它的处理效率比文本文件高。,3,学习目标,了解在java中如何处理 I/O(19.2),区分文本 I/O 与二进制I/O 的不同(19.3).,使用,FileInputStream,和,FileOutputStream 来读写字节,(19.4.1),使用DataInputStream,或,DataOutputStream,来读写基本类 型值和字符串(19.4.3).,使用ObjectOutputStream,和,ObjectInputStream,实现对象的存储与恢复,理解如何序列化对象以及什么样的对象才可以序列化(19.6).,实现Serializable,接口是对象可序列化(19.6.1).,序列化数组(19.6.2).,使用RandomAccessFile,对文件进行读写(19.7).,4,在java中如何处理输入/输出,File对象封装文件或路径属性,但是不包含从/向文件读/写数据的方法。为了进行I/O操作,需要使用正确的java I/O类创建对象。这些对象包含从/向文件中读/写数据的方法。,PrintWriter output=new PrintWriter(temp.txt);,output.println(Java 101);,output.close();,Scanner input=new Scanner(new File(temp.txt);,System.out.println(input.nextLine();,5,文本I/O与二进制I/O,尽管从技术上不怎么准确和正确,但是可以做这样的一个比喻,文本文件是由字符序列化构成的,而二进制文件是由位序列构成的。例如,十进制整数199在文本文件中是以三个字符序列199来存储的,而二进制文件中它是以byte类型的值C7存储的,因为十进制数199等价的十六进制数是C7(199=12*16+7)。,6,二进制I/O,在文本I/O中自动进行编码和解码。在写入一个字符时,java虚拟机会将统一码转换为文件指定的编码。而在读取字符时,将文件指定的编码转化为统一码。,二进制I/O不需要转化。如果使用二进制I/O向文件写入一个数值,就是将内存中的确切值复制到文件中。,7,二进制I/O类,8,The value returned is a byte as an int type.,InputStream,9,The value is a byte as an int type.,OutputStream,10,FileInputStream类和FileOutputStream类,FileInputStream 类和FileOutputStream类是为了从/向文件读取/写入字节。它们所有方法都是从InputStream类和OutputStream类继承的。,11,FileInputStream,为了构造一个 FileInputStream对象,使用下面的方法:,public FileInputStream(String filename),public FileInputStream(File file),如果试图为一个不存在的文件创建FileInputStream对象,将会发生,java.io.FileNotFoundException异常。,12,FileOutputStream,要构造一个 FileOutputStream对象,使用以下的构造方法,:,public FileOutputStream(String filename),public FileOutputStream(File file),public FileOutputStream(String filename,boolean append),public FileOutputStream(File file,boolean append),如果文件不存在,就创建一个新的文件。如果文件已经存在,前两个构造方法将删除文件中的当前内容。为了既保留当前的内容又可以给文件追加新数据,将最后两个构造方法中的参数append设置为true。,TestFileStream,Run,13,FilterInputStream/FilterOutputStream,过滤器数据流,是为了某种目的过滤器字节的数据流。基本字节输入流提供的读取方法read只能用来读取字节。如果要读取的整数值,双精度值或字符串,那就需要一个过滤器类包装字节输入流。使用过滤器类就可以读取整数,双精度值和字符串,而不是字节和字符。filterinputstream和filteroutputstream是过滤数据的基类。需要处理基本数值类型时,就使用datainputstream和DataOutputStream过滤字节。,14,DataInputStream/DataOutputStream,DataInputStream从数据流读取字节,并将它们转换为正确的基本类型或字符串。,DataOutputStream,将基本类型的值或字符串转换为字节,并且将字节输出到数据流。,15,DataInputStream,DataInputStream,类继承,FilterInputStream,并且实现了接口,DataInput,。,16,DataOutputStream,DataOutputStream,继承了,FilterOutputStream,并且实现了接口,DataOutput,。,17,二进制I/O中的字符与字符串,一个统一码由两个字节构成。writeChar(char c)方法将字符c的统一码写入输出流。writeChar(String s)方法将字符串s中所有字符统一码写到输出流中。,什么是,UTF-8?,为什么有,UTF-8?,UTF-8,是一种编码方案,它允许系统和统一码及,ASCII,码一起操作的编码方案。大多数操作系统是使用,ASCII,码,,java,使用统一码。,ASCII,码字符集是统一码字符集的子集。由于许多应用程序只需要,ASCII,码字符集,所以将,8,位的,ASCII,码转化为,16,位的统一码是很浪费的。,UTF-8,的修改版方案分别使用,1,字节,,2,字节或,3,字节来存储字符。如果字符的编码值小于或等于,Ox7F,就将字符编码为一个字节,如果编码值大于,Ox7F,就将该字符编码为两个字节,如果该字符的编码值大于,Ox7FF,就将该字符编码为三个字节。,18,使用,DataInputStream,和,DataOutputStream,类,数据流用于对存在创建的输入/输出流进行包装,以便在原始流中过滤数据。可以使用下面的构造方法来创建它们。,public DataInputStream(InputStream instream),public DataOutputStream(OutputStream outstream),下面给出的语句会创建数据流。第一条语句为文件in.dat创建一个输入流,;而第二条语句为文件,out.dat创建一个输出流,.,DataInputStream infile=,new DataInputStream(new FileInputStream(in.dat);,DataOutputStream outfile=,new DataOutputStream(new FileOutputStream(out.dat);,TestDataStream,Run,19,检测文件的末尾,如果到达InputStream的末尾之后还继续从中读取数据,就会发生,EOFException,异常。如何检测是否到达文件末尾。可以使用,input.available(),检测,,input.available()=0,表明一个文件结束。,顺序和格式,应该按存储的顺序和格式读取文件中的数据。例如:学生的姓名是用,writeUTF,方法以,UTF-8,格式写入,所以,读取时必须使用,readUTF,方法。,20,BufferedInputStream和BufferedOutputStream,Using buffers to speed up I/O,BufferedInputStream,/,BufferedOutputStream,没有新方法,所有的,BufferedInputStream,/,BufferedOutputStream,的方法都是从,InputStream,/,OutputStream,继承的,.,21,构造BufferedInputStream,/,BufferedOutputStream,/Create a BufferedInputStream,public BufferedInputStream(InputStream in),public BufferedInputStream(InputStream in,int bufferSize),/Create a BufferedOutputStream,public BufferedOutputStream(OutputStream out),public BufferedOutputStream(OutputStreamr out,int bufferSize),22,对象的输入输出,DataInputStream,/,DataOutputStream,可以实现基本数据类型与字符串的输入输出。而,ObjectInputStream,/,ObjectOutputStream除了,可以实现基本数据类型与字符串的输入输出之外,还可以实现对象的输入输出。,23,ObjectInputStream,ObjectInputStream,继承,InputStream,并实现接口,ObjectInput,与,ObjectStreamConstants,.,24,ObjectOutputStream,ObjectOutputStream 继承 OutputStream 并实现接口ObjectOutput and ObjectStreamConstants.,25,使用对象数据流,可以使用下面的,ObjectInputStream/ObjectOutputStream,构造方法包装任何一个 InputStream/OutputStream:,/Create an ObjectInputStream,public ObjectInputStream(InputStream in),/Create an ObjectOutputStream,public ObjectOutputStream(OutputStream out),TestObjectOutputStream,Run,TestObjectInputStream,R
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!