ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:50.68KB ,
资源ID:17302015      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17302015.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(12 第十二章 高级IO流Word文档下载推荐.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

12 第十二章 高级IO流Word文档下载推荐.docx

1、void close() 你完成流操作之后,就关闭这个流。如果你有一个流所组成的栈,使用过滤器流,就关闭栈顶部的流。这个关闭操作会关闭其余的流。int available()这个方法报告立刻可以从流中读取的字节数。在这个调用之后的实际读操作可能返回更多的字节数。skip(long)这个方法丢弃了流中指定数目的字符。boolean markSupported()void mark(int) void reset()如果流支持回放操作,则这些方法可以用来完成这个操作。如果mark()和reset()方法可以在特定的流上操作,则markSupported()方法将返回ture。mark(int)方法

2、用来指明应当标记流的当前点和分配一个足够大的缓冲区,它最少可以容纳参数所指定数量的字节。在随后的read()操作完成之后,调用reset()方法来返回你标记的输入点。OutputStreamvoid write(int )void write(byte )void write(byte , int, int)这些方法写输出流。和输入一样,总是尝试以实际最大的块进行写操作。void close() 当你完成写操作后,就关闭输出流。如果你有一个流所组成的栈,就关闭栈顶部的流。void flush()有时一个输出流在积累了若干次之后才进行真正的写操作。flush()方法允许你强制执行写操作。字符流R

3、eaderint read()int read(char)int read(char, int offset, int length)简单读方法返回一个int值,它包含从流里读出的一个字符或者-1,其中-1表明文件结束。其它两种方法将数据读入到字符数组中,并返回所读的字符数。第三个方法中的两个int参数指定了所要填入的数组的子范围。void close()boolean ready()void skip(long)这些方法与InputStream中的对应方法相似Writervoid write(int c)void write(char )void write(char , int offse

4、t, int length)void write(String string)void write(String string, int offset, int length)所有这些方法与OutputStream中的方法类似。节点流Java 2 SDK中有三种基本类型的节点:文件(file)、内存(memory)、管道(pipe)。如过程流过程流在其它流之上,完成排序、变换等操作。过程流也被称做过滤流。当你需要改变输入流的原始数据时,你可以将一个过滤输入流连接到一个原始的输入流上。用过滤流将原始数据变换成你需要的格式。其分类如图基本字节流类分类如图FileInputStream和FileOu

5、tputStream这两个节点流用来操纵磁盘文件。这些类的构造函数允许你指定它们所连接的文件。要构造一个FileInputStream,所关联的文件必须存在而且是可读的。如果你要构造一个FileOutputStream而输出文件已经存在,则它将被覆盖。主要用于操作二进制或者带有格式的文件:如压缩文件,可执行文件等。FileInputStream infile = new FileInputStream(myfile.dat);FileOutputStream outfile = new FileOutputStream(results.datBufferInputStream和BufferOu

6、tputStream带有缓冲区的流,BufferInputStream一次可以读入一定长度的数据(默认2048字节),BufferOutputStream一次可以一定长度的数据(默认512字节),可以提高I/O操作的效率。需要和其它的流类配合使用。BufferOutputStream在使用时,为了确保把数据写出去,建议最后执行flush()将缓冲区中的数据全部写出去。PipedInputStream和PipedOutputStream管道流用来在线程间进行通信。一个线程的PipedInputStream对象从另一个线程的PipedOutputStream对象读取输入。要使管道流有用,必须有一个

7、输入方和一个输出方。DataInputStream和DataOutputStream用来对java的基本数据类型读写的类DataInputStream方法 byte readByte() long readLong() double readDouble() String readUTF(DataInput in)DataOutputStream方法 void writeByte(byte) void writeLong(long) void writeDouble(double) void writeUTF(String str)PrintStream可以自动进行字符转换的动作,默认会使用操

8、作系统的编码处理对应的字符。import java.io.*;public class PrintStreamDemo public static void main(String args) throws FileNotFoundException PrintStream out = new PrintStream(new FileOutPutStream(1.txt); out.println(1); out.close(); 基本字符流类阐述了Reader和Writer字符流的体系结构。InputStreamReader 和 OutputStreamWriter用于字节流与字符流之间的转

9、换接口。当你构造一个InputStreamReader或OutputStreamWriter时,转换规则定义了16位Unicode和其它平台的特定表示之间的转换。InputStreamReader从一个数据源读取字节,并自动将其转换成Unicode字符。如果你特别声明,InputStreamReade会将字节流转换成其它种类的字符流。OutputStreamWriter将字符的Unicode编码写到输出流,如果你的使用的不是Unicode字符,OutputStreamWriter会将你的字符编码转换成Unicode编码。BufferedReader和BufferedWriter因为在各种格式之

10、间进行转换和其它I/O操作很类似,所以在处理大块数据时效率最高。在InputStreamReader和OutputStreamWriter的结尾链接一个BufferedReader和BufferedWriter是一个好主意。记住对BufferedWriter使用flush()方法。FileReader和FileWriter以字符的方式操作文件的类,主要用于操作文本文件。PrintWriter与PrintStream相类似,使用println()输出内容。URL输入流除了基本的文件访问之外,Java技术提供了使用统一资源定位器(URL)来访问网络上的文件。当你使用Applet的getDocume

11、ntBase()方法来访问声音和图象时,你已经隐含地使用了URL对象。 String imageFile = new String (images/Duke/T1.gif images0 = getImage(getDocumentBase(), imageFile);当然,你也可以直接使用URL如下:.URL imageSource;try imageSource = new URL(catch(MalformedURLException e) images0 = getImage(imageSource, Duke/T1.gif使用RandomAccessFile随机访问文件你经常会发现你

12、只想读取文件的一部分数据,而不需要从头至尾读取整个文件。你可能想访问一个作为数据库的文本文件,此时你会移动到某一条记录并读取它的数据,接着移动到另一个记录,然后再到其他记录每一条记录都位于文件的不同部分。Java编程语言提供了一个RandomAccessFile类来处理这种类型的输入输出。创建一个随机访问文件你可以用如下两种方法来打开一个随机存取文件:用文件名myRAFile = new RandomAccessFile(String name, String mode);用文件对象myRAFile = new RandomAccessFile(File file, String mode);

13、mode参数决定了你对这个文件的存取是只读(r)还是读/写(rw)。例如,你可以打开一个数据库文件并准备更新:RandomAccessFile myRAFile;myRAFile = new RandomAccessFile(db/stock.dbf,rw存取信息RandomAccessFile对象按照与数据输入输出对象相同的方式来读写信息。你可以访问在DataInputStrem和DataOutputStream中所有的read()和write()操作。Java编程语言提供了若干种方法,用来帮助你在文件中移动。long getFilePointer();返回文件指针的当前位置。void se

14、ek(long pos); 设置文件指针到给定的绝对位置。这个位置是按照从文件开始的字节偏移量给出的。位置0标志文件的开始。long length()返回文件的长度。位置length()标志文件的结束。添加信息你可以使用随机存取文件来得到文件输出的添加模式。java.logmyRAFile.seek(myRAFile.length();对象串行化java.io.Serializable接口支持将一个Java技术对象存放到一个流中。将一个对象存放到某种类型的永久存储器上称为保持。如果一个对象可以被存放到磁盘或磁带上,或者可以发送到另外一台机器并存放到存储器或磁盘上,那么这个对象就被称为可保持的。

15、java.io.Serializable接口没有任何方法,它只作为一个标记,用来表明实现了这个接口的类可以串行化。类中没有实现Serializable接口的对象不能被保持。当一个对象被串行化时,只有对象的数据被保存;方法和构造函数不属于串行化流。如果一个数据变量是一个对象引用,那么这个对象的数据成员也会被串行化。树或者对象数据的结构,包括这些子对象,构成了对象图。因为有些对象类所表示的数据在不断地改变,所以它们不会被串行化;例如,java.io.FileInputStream 、java.io.FileOutputStream和java.lang.Thread等流。如果一个可串行化对象包含某个

16、不可串行化元素的引用,那么整个串行化操作就会失败,而且会抛出一个NotSerializableException。如果对象图包含一个不可串行化的引用,只要这个引用已经用transient关键字进行了标记,那么对象仍然可以被串行化。public class MyClass implements Serializable public transient Thread myThread; private String customerID; private int total;域存取修饰符对于被串行化的对象没有任何作用。写入到流的数据是字节格式,而且字符串被表示为UTF(文件系统安全的通用字符集转

17、换格式)。transient关键字防止对象被串行化。 private transient String customerID;实例分析例1:从第一个命令行参数代表的文件中读字符,然后写入第二个参数代表的文件。问题分析本题中需要从文件读,写数据,需要使用到与文件有关的流FileReader/FileWriter。可以通过运行时参数提供文件的名称。使用带有Buffer功能的流为了提高读写数据的效率,可以使用带有buffer功能的流完成文件读写,并且可以以行为单位读写数据。使用类BufferedReader,BufferedWriterI/O流的链在程序中很少使用单独一个流对象,实际做法是将几个流对

18、象串联起来处共同理数据。这样做会提高程序的效率。数据源- FileInputStream - BufferedInputStream - DataInputStream - 程序数据源- DataOutputStream - BufferedOutputStream - FileOutputStream -程序编写代码public class TestBufferedStreams public static void main(String args) try FileReader input = new FileReader(args0); BufferedReader bufInput

19、= new BufferedReader(input); FileWriter output = new FileWriter(args1); BufferedWriter bufOutput = new BufferedWriter(output); String line = bufInput.readLine(); while (line != null) bufOutput.write(line, 0, line.length(); bufOutput.newLine(); line = bufInput.readLine(); bufInput.close(); bufOutput.

20、close(); catch (IOException e) e.printStackTrace(); 编译运行 javac TestBufferedStreams.java java TestBufferedStreams user.bat userbak.bat例2:使用管道流完成线程之间的通讯。1 问题分析本题中需要一个线程向管道写入数据,另外一个线程从管道中读出数据,需要使用到与管道有关的流PipedInputStream和PipedOutputStream。2 使用管道流 PipedInputStream in=new PipedInputStream(); PipedOutputS

21、tream out=new PipedOutputStream(in);3 编写代码public class TestPipeStream PipedInputStream in1 = new PipedInputStream(); PipedOutputStream out1 = new PipedOutputStream(in1); PipedInputStream in2 = new PipedInputStream(); PipedOutputStream out2 = new PipedOutputStream(in2); ThreadC tc = new ThreadC(out1)

22、; ThreadZ tz = new ThreadZ(out2, in1); ThreadQ tq = new ThreadQ(in2); tc.start(); tz.start(); tq.start(); catch (Exception e) static class ThreadC extends Thread DataOutputStream dos = null; public ThreadC(OutputStream os) dos = new DataOutputStream(os); public void run() while (true) try double d =

23、 Math.random(); dos.writeDouble(d); sleep(2); catch (Exception e) e.printStackTrace(); ; static class ThreadZ extends Thread DataInputStream dis = null; public ThreadZ(OutputStream os, InputStream is) dis = new DataInputStream(is); double d = dis.readDouble(); static class ThreadQ extends Thread pub

24、lic ThreadQ(InputStream is) System.out.println(d); 编译运行 javac TestPipeStream.java java TestPipeStream例3:保存所有的Person对象到文件并以对象的方式读出来本题中需要对文件读,写对象数据,需要使用到与对象有关的流ObjectInputStream/ObjectOutputStream。 2 使用对象的读写流 ObjectOutputStream用于将一个对象输出,输出对象使用的方法为writeObject(Object obj) ObjectInputStream用于读取一个对象,读取对象使

25、用的方法为readObject()注意: 被读写的对象必须是已序列化的类的对象,即要实现要Serializable接口。import java.util.*;class Person implements Serializable String name = null; public Person(String s) name = s; public String toString() return name;public class TestObjectStream ObjectOutputStream oos = null; ObjectInputStream ois = null; File f

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1