《2022年java文件流介绍 .pdf》由会员分享,可在线阅读,更多相关《2022年java文件流介绍 .pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Input/Output:指跨越出JVM 的边界,与外界数据的源头或者目标数据源进行数据交换.输出Output-JVM 数据源 文件、网络程序-数据来源输入流2、流的分类:按处理方式来分:字节流:按8 位传输InputStream OutputStream 字符流:按16 位传输Reader Writer 按功能来分:节点流:与文件、网络打交道的流,操作数据的来源处理流(包装流):操作节点流名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 5 页 -如何区分:输入流:以InputStream、Reader结尾的流FileInputStream BufferedReader 输出流:
2、以OutputStream、Writer 结尾的流FileOutputStream PrintWriter 字节流:以InputStream、OutputStream 结尾的流字符流:以Reader、Writer 结尾的流节点流:看构造器,参数为数据来源,参数是String 或 File 之类的new FileInputStream(d:abc.txt);new FileOutputStream(new File(d:abc.txt)处理流:构造器的参数为其它流new BufferedReader(new InputStreamReader(new FileInputStream(d:abc.
3、txt);PrintWriter 选择流时:首先确定是输入还是输出。其次确定是字节流还是字符流。然后确定是节点流还是处理流。根据数据类型选择输入/输出流:byte、byte InputStream/OutputStream int、byte、char、double、String DataInputStream/DataOutputStream char、String Reader/Writer Object ObjectInputStream/ObjectOutputStream 若考虑性能会在前试着加Buffered 3、常用流:DataInputStream&DataOutputStrea
4、m 用于读写基本类型数据,如 int、float、long、double和 boolean 等。此外,DataInputStream 的 readUTF()方法还能读取采用UTF-8 字符编码的字符串。BufferedInputStream&BufferedOutputStream 因为利用了缓冲区,所以常用于提高读写数据的效率。BufferedInputStream 先把一批数据读入到缓冲区,接下来 read方法只需要从缓冲区内获得数据,减少了物理性读取数据的次数。可以使用 BufferedInputStream(InputStream in,int size)中的 size 来指定缓冲区的
5、大小ObjectOutputStream&ObjectInputStream 对象的序列化是指把对象写到一个输出流中,对象的反序列化是指从一个输入流中读取一个对象。Java语言要求只有实现了java.io.Serializable 接口的类的对象才能序列化和反序列化名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 5 页 -Reader/Writer 当 需 要 程 序 读 写 文 本 文 件,而 且 文 本 文 件 采 用 特 定 的 字 符 编 码 集 时,应 采 用Reader/Writer。InputStreamReader&OutputStreamWriter 桥梁流把字
6、节流转换成字符流在桥转换的时候可以指定编解码方式new BufferedReader(new InputStreamReader(new FileInputStream(d:abc.txt),utf8);BufferedReader readLine()方法可以一次读入一行字符,以字符串形式返回。PrintWriter 输出格式化的数据,所有的写数据的方法以print 开头。print(int i)print(long l)print(float f)print(String s)每个 print()方法都有一个println()方法对应a.printWriter.println(Hello)
7、;b.printWriter.print(Hello);printWriter.println();c.printWriter.print(Hellon);以上三段代码是等价的4、JAVA 编码问题:UTF-8,GBK,GB2312 是可以显示中文的。ASCII 一个字符-1B 任何一种编码均兼容A65 ISO8859-1(西欧)一个字符-1B GB2312/GBK 一个字符-2B Unicode 一个字符-2B 会增加网络负担Java中的 char 是 Unicode UTF-8 变长字节(变长的 Unicode 方式)英文-1B 中文-3B 提供编码帮助的类:java.nio.charse
8、t.Charset GBK-中、日、韩,gb2312 是 GBK 的子集会出现中文编码问题的情况:1、用流操作文件时2、网页(动态、静态)3、网络传递信息时名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 5 页 -String-乱码(再次转码)String temp=p.getProperty(name);temp=new String(temp.getBytes(ISO8859-1),GBK);这两处的编码有时需要互换位置对象序列化1:定义:把对象作为一个整体,在I/O 流中传播2:语法:()实现了 Serializeble 接口的对象才能可序列化。这个接口里没有任何方法,没有
9、方法的接口称为标记接口。例如:class Student implements Serializeble()如果一个序列化后的对象里面有一个属性是个对象属性,那么这个对象属性也需要实现序列化。例如:class Student implements Serializeble Teacher t;/必须序列化 class Teacher implements Serializeble(3)包名、类名、属性可以被序列化方法、构造器不会序列化所有的静态属性都不会被序列化用 transient 关键字修饰的属性是临时属性,临时属性不参与序列化。(4)当父类实现Serializeble 接口,子类自动实现
10、。对象序列化会创建对象,不调用构造,但子类实现Serializeble 接口,父类没有实现实现Serializeble 接口,父类在反序列化时会调用构造。3:使用注意:a.用 readObject 读文件的时候,当文件结束的时候会抛出EOFException,当我们捕获这个异常的时候,程序就结束了。Object o=null;while(o=ois.readObject()!=null)b.如果需要向一个文件中追加对象,首先要把文件中原有的对象读出来,再把原有对象和新追加的对象一起写入到文件。c.serialVersionUID 是静态常量,表示当前对象的版本号,在接受传输的数据时会自动检查该
11、值,保证版本的相同。java.util.Properties 属性类,针对属性文件操作,早期使用。好处是可以在不修改代码的情况下改变相应的需求。文件名以.properties 结尾的文件称为属性文件文件的内容是:名字=值 的形式常用方法:public void load(InputStream inStream)throws IOException 名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 5 页 -public void store(OutputStream out,String comments)throws IOException public String getProperty(String key)public String getProperty(String key,String defaultValue)public Object setProperty(String key,String value)名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 5 页 -