《2022年2022年流和序列化 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年流和序列化 .pdf(3页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、流:流:数据由一个位置移动到另一个位置,就是从源接受的有序数据对我们程序来说输入流:我们程序可以通过输入流江源中的数据读到程序中输出流:程序可以通过这个输出流将程序中的数据写到输出流的另一端流的分类:按流向:分为输入流输出流按处理数据的类型:分为字节流和字符流节点流和处理流节点流:就是直接从磁盘或者网络中获得的原始流处理流:对节点流进行了一定的包装(封装)的流流的分类: 按照流向分为输入流和输出流;按照处理的数据类型分为字节流和字符流;按照处理方式分为节点流和处理流。文件程序程序文件文件文件程序程序程序网络网络程序常见的输入流:InputStream*InputStream的父类(处理字节:b
2、yte b )FileInputstream 读文件InputStream is= new FileInputStream( “”); Reader *Reader 的父类(处理字符: char c)FileReader 读文件Reader r = new FileReader(); BufferedReader为 Reader提供的缓冲流, 通常情况下我们操作字符的时候,会将Reader进一步包装成 BufferedReader 操作数据,它提供的readLine()方法直接操作字符串DataInputStream 一般用在需要从文件中获取指定数据类型的数据的时候ZipInputStream
3、 用在.zip 文件的解压ObjectInputStream 主要用在对象反序列化的时候注意:我们通常从文件/网络 /控制台获取到的输入流都是字节流,但是对于我们来说,我们更希望操作字符流( BufferedReader) ,那么我们就需要解决“由字节流到字符流的转换”问题,因此我们需要借助一个转换流: InputStreamReader常见的输出流:OutputStream FileOutputStream Writer FileWriter Writer w = new FileWriter( “”,true);当第二个参数为true ,表示追加BufferedWriter PrintWr
4、iter 提供了 println() 方法,而无需BufferedWriter 中的 newLine()方法DataOutputStream ZipOutputStream ObjectOutputStream OutputStreamWriter将字节流转换字符流的桥梁名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 3 页 - - - - - - - - - InputStream 字节输入流:(从文件到程序)FileInputStream: 从文件读取System.i
5、n:从控制台读取int read(byte b) 三种返回值表示的状态:0 表示读到的字节数;=0 读到的是“”;=-1 文件已经读完了OutputStream 字节输出流:(从程序到文件)FileOutputStream :写入到文件System.out:打印到控制台write(byte b, int start,int length); 三个参数的含义:byte b :b 中的内容即是我们要写到文件的内容int start :表示从 b 中的哪个元素开始输出到文件int length :输出多少个字符Reader字符输入流: (从文件到程序)FileReader:Reader r = ne
6、w FileReader(“filePath”); BufferedReader br = new BufferedReader(r); InputStreamReader:转换流,我们常用于InputStream 和 BufferedReader 之间的转换InputStream is = new FileInputStream(“filePath”);InputStreamReader ins = new InputStreamReader(is); BufferedReader br = new BufferedReader(ins); BufferedReader: 注意其中的read
7、Line()方法,返回值是String 类型,当返回null 时,表示文件读取结束Writer 字符输出流: (从程序到文件),在调用完 write()/println() 方法之后记得调用flush() FileWrite: Writer w = new FileWrite ( “filePath”); BufferedWriter bw = new BufferedWriter (w); OutputStreamWriter: 转换流,我们常用语OutputStream 和 BufferedWriter 之间的转换OutputStream os= new FileOutputStream(
8、“filePath”);OutputStreamReader osr = new OutputStreamReader(os); BufferedWriter bw = new BufferedWriter (osr); BufferedWriter :注意 write(char c) 和 write(charc,int start,int length) 还有 write(String str); 但是这几个write 方法都有一个弊端就是输出后没有换行,所以要手动调用newLine()方法来换行PrintWriter :有一个 println(String str), 这个方法有换行,所以
9、就不需要我们手动添加换行OutputStream os= new FileOutputStream(“filePath”);PrintWriter pw = new PrintWriter(os); 或者: PrintWriter pw = new PrintWriter(new File(“filePath”);RandomAccessFile :这个类继承了InputStream 和 OutputStream ,所以既可以用来读取文件还可以用来写入到文件,用这个类还可以通过seek(long l)来设置从文件的多少个字符开始读取/写入,在构造器中还可以通过读写模式的设置还控制是否允许“读/
10、写/读写”一个文件;注意length()方法可以用获取文件的内容长度,也就是说可以通过obj.seek(obj.length();来跳到文件末尾实现文件的追加。其常用构造方法:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 3 页 - - - - - - - - - RandomAccessFile (File file, String mode)-mode:r /rw RandomAccessFile ( String name, String mode)ZipOutp
11、utStream:用来创建一个压缩文件/ 压缩文件的输出路径及名称OutputStream os = new FileOutputStream(E:/test.zip); ZipOutputStream zos = new ZipOutputStream(os); / 制定压缩条目(也就是说压缩的时候以什么路径、什么文件名压缩)/ 这决定了解压后的文件以及文件夹的包含关系ZipEntry ze = new ZipEntry(abc/aaa.txt); zos.putNextEntry(ze); String str = aaaaaaaaa; zos.write(str.getBytes();
12、zos.flush(); zos.finish(); ZipInputStream:用例解压一个压缩文件ZipInputStream zis = new ZipInputStream(new FileInputStream(E:/test.zip); ZipEntry ze2 = null; / 外层 while 遍历压缩文件的条目while(ze2 = zis.getNextEntry()!=null) System.out.println(ze2.getName(); byte b = new byte10; int len = 0; / 内层的 while 是循环兑取一个文件的内容whi
13、le(len=zis.read(b)!=-1) System.out.write(b,0,len); System.out.println(); JarOutputStream :压缩成 jar 包JarInputStream :解压 jar 包DataInputStream:DataOutputStream:對象序列化:一個類只有實現了Serializable 或者 Externalizable 接口,其對象才能夠被保存在磁盤或者網絡中,对象序列化就是指将对象保存在磁盘或者网络中在一个类中,属性和类名可以被序列化,被static 或者 transient 修饰的属性和方法不能够被序列化序列化需要借助于ObjectOutputStream 类中的 writeObject() 方法实现對象的反序列化:就是将网络或者磁盘中的对象读取出来反序列化需要借助于ObjectInputStream 类中的 readObject() 方法来实现,需要注意的是,我们通过这个方法取到的对象都是Object 类型,需要通过强制造型来转换为我们需要取到的对象的类型名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 3 页 - - - - - - - - -