转换流

介于字符流和字节流之间的流

字节流与字节流相互转换

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框架相关推荐

  1. Java基础19:IO流—缓冲流、转换流、序列化、打印流、压缩流和解压流

    IO流中的一些其他流:缓冲流.转换流.序列化.打印流.压缩流和解压流 1. 缓冲流 IO流除了一些基本的流,还有在此基础上发展出来的一些更强大的流.比如能够高效读写的缓冲流,能够转换编码的转换流,能够 ...

  2. JAVA基础-08.File类与IO流-21.【缓冲流、转换流、序列化流、打印流】

    01_缓冲流的原理 02_转换流的原理 03_序列化和反序列化的概述 04_序列号冲突异常的原理和解决方案 day10[缓冲流.转换流.序列化流] 主要内容 缓冲流 转换流 序列化流 打印流 教学目标 ...

  3. Java IO流学习总结七:Commons IO 2.5-FileUtils

    Java IO流学习总结七:Commons IO 2.5-FileUtils 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/5497 ...

  4. IO流 (四) ----- 转换流和标准字节输出流

    相关文章: <IO流 (一) ----- 基本概念和File类> <IO流 (二) ----- 文件流> <IO流 (三) ----- 字符流和字符缓冲流> < ...

  5. IO流 (二) ----- 文件流

    相关文章: <IO流 (一) ----- 基本概念和File类> <IO流 (二) ----- 文件流> <IO流 (三) ----- 字符流和字符缓冲流> < ...

  6. 黑马程序员_JAVA之IO流的(转换流,数据输入输出流等)

    ------- android培训.java培训.期待与您交流!---------- IO流: 笔记内容:转换流,字节输入输出流,数据输入输出流,内存操作流,随机访问流 打印流,对象序列化流,Prop ...

  7. 25.java中IO流的应用---缓冲流、转换流以及对象流过程(附讲解和练习)

    处理流之一:缓冲流  为了提高数据读写的速度, Java API提供了带缓冲功能的流类,在使用这些流类时,会创建一个内部缓冲区数组,缺省使用8192个字节(8Kb)的缓冲区.  缓冲流要" ...

  8. Java IO流之转换流

    一.转换流 1.在IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换流 2.转换流用于在字节流和字符流之间转换 3.转换流本身是字符流 二.两种转换流 Ou ...

  9. Java IO流学习总结八:Commons IO 2.5-IOUtils

    Java IO流学习总结八:Commons IO 2.5-IOUtils 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/550519 ...

  10. 菜鸟学习笔记:Java提升篇5(IO流1——IO流的概念、字节流、字符流、缓冲流、转换流)

    菜鸟学习笔记:Java IO流1--IO流的概念.字节流.字符流.缓冲流.转换流 IO流的原理及概念 节点流 字节流 文件读取 文件写出 文件拷贝 文件夹拷贝 字符流 文件读取 文件写出 处理流 缓冲 ...

最新文章

  1. 纯CSS制作的图形效果
  2. ​有多少小伙伴用着 JDK8 却写着 JDK6 的代码
  3. SpringBoot 的其他使用 及 maven打包
  4. Linux--Socket Buffer--Netowrk Devices--Network Drivers
  5. BeanUtils组件
  6. ch341a编程和ttl刷机区别_土豪金CH341a编程器 开箱晒物
  7. 解决 git pull 报错 fatal: refusing to merge unrelated histories
  8. 技术人的“匠心”:一件事竟然做了20年…
  9. 一个上帝视角的java游戏_从上帝视角看Java如何运行
  10. [代码]--GridControl使用技巧总结,更新中...
  11. 浏览器输入网址回车发生的事情?--
  12. 手动实现读写锁(线程级)
  13. C语言--《C专家编程》C语言申明的优先级规则
  14. java把秒时长转换为分钟_java - 将秒值转换为小时分钟秒?
  15. 自动驾驶技术基础——GNSS
  16. mysql数据库的单引号用法_[数据库]mysql单引号和双引号的用法
  17. 《股市稳赚》书中的精髓:用简单的神奇公式进行股票投资,获得稳定而持久的收益。
  18. (php毕业设计)基于php的家居商城管理系统源码
  19. 指定服务器不存在或访问被拒绝访问,SQL Server不存在或访问被拒绝怎么办
  20. VR全景图片,助力VR全景制作,720全景效果图

热门文章

  1. linux open系统调用的O_DIRECT标记
  2. Effective C++ 1.0 -- 概述
  3. SQL Server基础操作(此随笔仅作为本人学习进度记录七 !--存储过程)
  4. 简单又实用的分享!SharePoint母版页引用(实战)
  5. 关于CSS的长度单位及颜色表示
  6. 配置用户通过Telnet登录设备的身份认证(AAA本地认证)
  7. Uva 10048 - Audiophobia (Floyd变形)
  8. BZOJ 2957楼房重建
  9. [JavaWeb基础] 007.Struts2的配置和简单使用
  10. 整理收集49条JQuery代码小结