IO流(二)转换流、序列化、commons-IO框架
转换流
介于字符流和字节流之间的流
字节流与字节流相互转换
OutputStreamWriter
输出流,按照指定的字符集编码,把字符流转化成字节数据
编码:把字符数据转换成字节数据;
解码:把字节数据转换成字符数据 二进制数据—>字符数据
- 构造方法:
- OutputStreamWriter(OutputStream out) 创建使用默认字符(计算机系统的编码)编码的 OutputStreamWriter。
- OutputStreamWriter(OutputStream out, String charsetName) 创建使用指定字符集的 OutputStreamWriter
- 方法
- void write(char[] cbuf, int off, int len) 写入字符数组的某一部分,到文件中
- void write(int c) 写入单个字符,到文件中
- void write(String str, int off, int len) 写入字符串的某一部分,到文件中
InputStreamReader
输入流,将字节数据转换成字符数据
- 构造方法
方法
public class Demo {public static void main(String[] args) throws Exception {method("UTF-8"); }public static void method(String encoding) throws UnsupportedEncodingException, FileNotFoundException, IOException {InputStreamReader isr=new InputStreamReader(new FileInputStream("a.txt"),encoding);char [] cArray=new char[1024];int len = isr.read(cArray);System.out.println(new String(cArray, 0,len));isr.close(); }private static void method02() throws UnsupportedEncodingException, FileNotFoundException, IOException {OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("b.txt"),"UTF-8");osw.write("中国");System.out.println("写入成功");osw.close(); }private static void method01() throws FileNotFoundException, IOException {OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("a.txt"));osw.write("你好");System.out.println("写入成功");osw.close(); }
}
序列化和反序列化
序列化(ObjectOutputStream):把java对象对应的二进制数据存储到文件中
反序列化(ObjectInputStream):把文件找中的对象二进制数据转成对象
反序列化出现类型无效异常怎么解决
Exception in thread “main” **java.io.InvalidClassException.**com.day12.text.Student; local class incompatible: stream classdesc serialVersionUID = 5347324120869492511, local class serialVersionUID = 6670513660087444604
原因:当初序列化时,使用类与现在反序列化的使用到的类不是同一个版本
解决方法:保证序列化用到的类与现在反序列化用到的这个类是同一个版本
利用版本号进行标记
private static final long serialVersionUID = 6670513660087444604L;
相同版本号的才可以进行反序列化
瞬态关键字transient
被标记的属性会被隐藏,不会被保存到文件中
怎么写入和读取多个对象
写入对象需要注意的是:每次更改了对象的属性或者方法时,都要重新写入到文件,不然会报出版本不匹配的异常。
读取对象:在读取对象时,不能像读取文件那样全部能读出来。读取只能读取对象文件首个元素。为了能读取多个元素可以使用数组或者集合来存放对象,将数组或者对象写入到文件中。然后在读取出来。
向文件中写入对象代码
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;public class DemoObjectOutputStream {public static void main(String[] args) throws Exception {//创建对象输出流ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("student1.txt"));//创建集合存放学生对象ArrayList<Student>list=new ArrayList<Student>();//创建对象数组 将对象添加到集合
// Student[] stu=new Student[3];
// stu[0]=new Student("小白",87);
// stu[1]=new Student("呵呵",67);
// stu[2]=new Student("好好",77);Student stu=new Student("好好",77);Student stu1=new Student("好好1",77);list.add(stu);list.add(stu1);//遍历集合将集合的内容添加到文件中/* for(int i=0;i<list.size();i++){Student student = list.get(i);oos.writeObject(student);}*///oos.writeObject(stu);oos.writeObject(list);System.out.println("写入成功");oos.close();}
}
读取对象到控制台(内存)
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.ObjectInputStream;
import java.util.ArrayList;public class DemoObjectInputStream {public static void main(String[] args) throws Exception {//创建对象输出流ObjectInputStream ois=new ObjectInputStream(new FileInputStream("student1.txt"));//Student []stu=(Student[])ois.readObject();ArrayList<Student> list = (ArrayList<Student>) ois.readObject();System.out.println(list.get(0).getName());ois.close();}}
学生对象代码
import java.io.Serializable;public class Student implements Serializable{private String name;private int grade;public Student(String name, int grade) {super();this.name = name;this.grade = grade;}@Overridepublic String toString() {return "Student [name=" + name + ", grade=" + grade + "]";}public Student() {super();// TODO Auto-generated constructor stub}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getGrade() {return grade;}public void setGrade(int grade) {this.grade = grade;}
}
commons-IO 框架
第三方框架这里有操作文件的工具类。
IO流(二)转换流、序列化、commons-IO框架相关推荐
- Java基础19:IO流—缓冲流、转换流、序列化、打印流、压缩流和解压流
IO流中的一些其他流:缓冲流.转换流.序列化.打印流.压缩流和解压流 1. 缓冲流 IO流除了一些基本的流,还有在此基础上发展出来的一些更强大的流.比如能够高效读写的缓冲流,能够转换编码的转换流,能够 ...
- JAVA基础-08.File类与IO流-21.【缓冲流、转换流、序列化流、打印流】
01_缓冲流的原理 02_转换流的原理 03_序列化和反序列化的概述 04_序列号冲突异常的原理和解决方案 day10[缓冲流.转换流.序列化流] 主要内容 缓冲流 转换流 序列化流 打印流 教学目标 ...
- Java IO流学习总结七:Commons IO 2.5-FileUtils
Java IO流学习总结七:Commons IO 2.5-FileUtils 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/5497 ...
- IO流 (四) ----- 转换流和标准字节输出流
相关文章: <IO流 (一) ----- 基本概念和File类> <IO流 (二) ----- 文件流> <IO流 (三) ----- 字符流和字符缓冲流> < ...
- IO流 (二) ----- 文件流
相关文章: <IO流 (一) ----- 基本概念和File类> <IO流 (二) ----- 文件流> <IO流 (三) ----- 字符流和字符缓冲流> < ...
- 黑马程序员_JAVA之IO流的(转换流,数据输入输出流等)
------- android培训.java培训.期待与您交流!---------- IO流: 笔记内容:转换流,字节输入输出流,数据输入输出流,内存操作流,随机访问流 打印流,对象序列化流,Prop ...
- 25.java中IO流的应用---缓冲流、转换流以及对象流过程(附讲解和练习)
处理流之一:缓冲流 为了提高数据读写的速度, Java API提供了带缓冲功能的流类,在使用这些流类时,会创建一个内部缓冲区数组,缺省使用8192个字节(8Kb)的缓冲区. 缓冲流要" ...
- Java IO流之转换流
一.转换流 1.在IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换流 2.转换流用于在字节流和字符流之间转换 3.转换流本身是字符流 二.两种转换流 Ou ...
- Java IO流学习总结八:Commons IO 2.5-IOUtils
Java IO流学习总结八:Commons IO 2.5-IOUtils 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/550519 ...
- 菜鸟学习笔记:Java提升篇5(IO流1——IO流的概念、字节流、字符流、缓冲流、转换流)
菜鸟学习笔记:Java IO流1--IO流的概念.字节流.字符流.缓冲流.转换流 IO流的原理及概念 节点流 字节流 文件读取 文件写出 文件拷贝 文件夹拷贝 字符流 文件读取 文件写出 处理流 缓冲 ...
最新文章
- 纯CSS制作的图形效果
- ​有多少小伙伴用着 JDK8 却写着 JDK6 的代码
- SpringBoot 的其他使用 及 maven打包
- Linux--Socket Buffer--Netowrk Devices--Network Drivers
- BeanUtils组件
- ch341a编程和ttl刷机区别_土豪金CH341a编程器 开箱晒物
- 解决 git pull 报错 fatal: refusing to merge unrelated histories
- 技术人的“匠心”:一件事竟然做了20年…
- 一个上帝视角的java游戏_从上帝视角看Java如何运行
- [代码]--GridControl使用技巧总结,更新中...
- 浏览器输入网址回车发生的事情?--
- 手动实现读写锁(线程级)
- C语言--《C专家编程》C语言申明的优先级规则
- java把秒时长转换为分钟_java - 将秒值转换为小时分钟秒?
- 自动驾驶技术基础——GNSS
- mysql数据库的单引号用法_[数据库]mysql单引号和双引号的用法
- 《股市稳赚》书中的精髓:用简单的神奇公式进行股票投资,获得稳定而持久的收益。
- (php毕业设计)基于php的家居商城管理系统源码
- 指定服务器不存在或访问被拒绝访问,SQL Server不存在或访问被拒绝怎么办
- VR全景图片,助力VR全景制作,720全景效果图
热门文章
- linux open系统调用的O_DIRECT标记
- Effective C++ 1.0 -- 概述
- SQL Server基础操作(此随笔仅作为本人学习进度记录七 !--存储过程)
- 简单又实用的分享!SharePoint母版页引用(实战)
- 关于CSS的长度单位及颜色表示
- 配置用户通过Telnet登录设备的身份认证(AAA本地认证)
- Uva 10048 - Audiophobia (Floyd变形)
- BZOJ 2957楼房重建
- [JavaWeb基础] 007.Struts2的配置和简单使用
- 整理收集49条JQuery代码小结