IO流(熟练使用API).doc

上传人:壹****1 文档编号:542984085 上传时间:2023-12-16 格式:DOC 页数:14 大小:166.51KB
返回 下载 相关 举报
IO流(熟练使用API).doc_第1页
第1页 / 共14页
IO流(熟练使用API).doc_第2页
第2页 / 共14页
IO流(熟练使用API).doc_第3页
第3页 / 共14页
IO流(熟练使用API).doc_第4页
第4页 / 共14页
IO流(熟练使用API).doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《IO流(熟练使用API).doc》由会员分享,可在线阅读,更多相关《IO流(熟练使用API).doc(14页珍藏版)》请在金锄头文库上搜索。

1、流(熟练使用)(一):简单介绍(java.io包)1:流的分类:(1) 输入流 / 输出流:根据数据方向分类输入流:读取流输出流:写入流(2)字节流 / 字符流:根据数据单位分类(根据处理数据的不同来区分)(3)节点流 / 过滤流(包装流):根据流功能分类区别:()所有以inputstream/outstream为结尾的流都是字节流, 以reader/writer为结尾的是字符流(但是桥转换流例外InputStreamReader/OutputStreamWriter)是一个包装流()节点流:可以直接读取源数据的流(直接点说:就是参数可以是数据源)6流)。字节流字符流备注FileOutputS

2、treamFileInputStreamFileWriterFileReader二进制文件用字节流,字符文件用字符流PipedOutputStreamPipedInputStreamPipedWriterPipesReader主要用于线程间通信处理流(过滤流)BufferedOutputStreamBufferedInputStreamBufferdWriterBufferedReader带有缓冲的流,只有在缓冲满的时候或者手动刷新的时候DataOutputStream DataInputStream无读写基本类型的数据的方法PrintStreamPrintWriter主要用于记录日志,格式化

3、的输出,所见即所输入,在构造的时候,确定是否自动刷新ObjectOutputStreamObjectInputStream无对象的序列化OutputStreamWriterInputStreamReader无用于字节流和字符流的转化(桥转换流)Java IO的一般使用原则:一、按数据来源(去向)分类:1、是文件: FileInputStream, FileOutputStream, FileReader, FileWriter2、是byte:ByteArrayInputStream, ByteArrayOutputStream3、是Char: CharArrayReader, CharArra

4、yWriter4、是String: StringBufferInputStream, StringReader, StringWriter5、网络数据流:InputStream, OutputStream, Reader, Writer二、按是否格式化输出分:1、要格式化输出:PrintStream, PrintWriter三、按是否要缓冲分:1、要缓冲:BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter四、按数据格式分:1、二进制格式(只要不能确定是纯文本的): InputStream, Outp

5、utStream及其所有带Stream结束的子类2、纯文本格式(含纯英文与汉字或其他编码方式);Reader, Writer及其所有带Reader, Writer的子类五、按输入输出分:1、输入:Reader, InputStream类型的子类2、输出:Writer, OutputStream类型的子类六、特殊需要:1、从Stream到Reader,Writer的转换类:InputStreamReader, OutputStreamWriter2、对象输入输出:ObjectInputStream, ObjectOutputStream3、进程间通信:PipeInputStream, PipeO

6、utputStream, PipeReader, PipeWriter4、合并输入:SequenceInputStream(序列流)5、更特殊的需要:PushbackInputStream, PushbackReader, LineNumberInputStream, LineNumberReader决定使用哪个类以及它的构造进程的一般准则如下(不考虑特殊需要):第一,考虑最原始的数据格式是什么:是否为文本?第二,是输入还是输出?第三,是否需要转换流:InputStreamReader, OutputStreamWriter?第四,数据来源(去向)是什么:文件?内存?网络?第五,是否要缓冲:b

7、ufferedReader (特别注明:一定要注意的是readLine()是否有定义,有什么比read, write更特殊的输入或输出方法)第六,是否要格式化输出:print?(二):使用注意:1:打开一个流之后,一定要注意关闭。2:OutputStream os=new OutputStream(2,txt);注意:调用完这句话的时候,就会创建一个2.txt文件,如果原来已经有了这个文件,则会把原来的删掉,再创建一个新的。如果需要追加:则这样构造:OutputStream os=new OutputStream(2.txt,true );3:被包装的流对象在关闭流的时候只用关闭最外边的流。

8、FileOutputStream fa=new FileOutputStream(“a.txt”);BufferedOutputStream bos=new BufferedOutputStream(fa);Bos.close();4:对一个存储文件输出的顺序应该和输入的顺序相同,否则输出的内容就会改变。5:如果用的是带缓冲的输出流,如果没有关闭的话,需要时刻注意清空缓冲区。如果关闭流对象的时候,系统会默认清空缓冲区。6:流的read方法都会引起线程的阻塞,直到流被真正的写入或者读出7:在流中处理异常的机制:关掉流对象的地语句应该放在finally语句里面执行。并且流对象的定义和初始化应该在t

9、ry 外边,最规范的写法如下所示:Public static int main(String args)FileInputStream fis=null;/一定要在外边定义,并且赋初值NULLTryfis= new FileInputStream (1.txt);catch(IOException e)finallyIf(fis!=null)/判断一下,如果为空的话,就不用再关闭Close(fis);9:编码问题:(1) 解码和编码解码:把本地编码解释成为unicode码编码:把unicode码再解释成为本地编码new String (byte,”编码方式”);注意:对于非unicode码来说

10、,应该先解码再编码,才有可能复原。(2) 代码实现String s=new String(你好.getBytes(gb2312),iso8859_1);String s2=new String(s.getBytes(iso8859_1),gb2312);(三):对象序列化(面试)1:原因(对象持久化):对象只能存储在内存中,它的状态不能够长久保存,需要把对象保存在持久化资源中,对象序列化就是为了对象持久化作准备,并且只有实现了序列化,才能够在持久化资源和内存中传输或者是进行网络传输。2:定义:(1)对象的序列化,在java当中是采用流的方式进行的。把对象作为一个整体,在I/O流中传输,把这个对

11、象写入到持久化资源中。这个过程就叫做对象序列化,(2)反序列化:把对象从持久化资源中读取出来的过程。利用的两个流对象为ObjectOutputStream / ObjectInputStream 3:语法:(面试)():实现了Serializeble接口的对象才能可序列化。这个接口里没有任何方法(标记接口)。例如:Class student implements Serializeble():如果一个序列化后的对象里面有一个属性是个对象属性,那么这个属性对象也需要实现序列化。例如:Class Student implements SerializebleTeacher T;必须序列化Class

12、 Teacher implements Serializeble(3):用transient关键字修饰的属性是临时属性,临时属性不参与序列化与反序列化。什么情况下需要序列化 a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候; b)当你想用套接字在网络上传送对象的时候; c)当你想通过RMI(Remote Method Invocation 远程方法调用)传输对象的时候;I/O流和文件操作Stream流的概念流是程序和设备之间交换数据的工具。源目的地流的分类:输入流/输出流字节流/字符流节点流/包装流输入流:输入程序(读)输出流:程序输出(写)2)底层对数据操作单位p289 cor

13、ejava字节流(byte)所有文件,网络,键盘(所有设备)字符流(char)所有文本操作3)按数据来源(操作对象)1、节点流(低级)直接操作设备2、处理流(高级)(包装流)操作节点流(增强功能)输入流:以(字节)InputStream结尾 : FileInputStream(节符)Reader结尾 : FileReader输出:(字节)OutputStream :FileOutputStream(字符)Writer :FileWriter节点流:new XXX( 设备 ) :FileReader/FileInputStream包装流:new XXX(流)/这个要看清楚 :BufferedRe

14、ader/InputStreamReaderjava.io 类 InputStream构造方法摘要InputStream() 方法摘要abstract intread() 从输入流读取下一个数据字节。返回-1作为流的结束标志。intread(byteb) 从输入流中读取一定数量的字节并将其存储在缓冲区数组 b 中。返回的整形值,表示读了多少个字节。intread(byteb, intoff, intlen) off表偏移量,可以不从0号下标开始分;len表示最多读len个字节。将输入流中最多 len 个数据字节读入字节数组。voidclose() 关闭此输入流并释放与该流关联的所有系统资源。java.io 类 OutputStream方法摘要voidwrite(byteb) 将 b.length 个字节从指定的字节数组写入此输出流。只写最低的那个字节,高位三个字节没有abstract voidwrite(intb) 将指定的字节写入

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

当前位置:首页 > 生活休闲 > 社会民生

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