java的转换流、压缩流、序列化流、打印流

这篇具有很好参考价值的文章主要介绍了java的转换流、压缩流、序列化流、打印流。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、转换流
转换流属于字符流,也是一种高级流,用来包装Reader和Writer。转化流是字符流和字节流之间的桥梁。转换输入流为InputStreamReader,把把字节流转化为字符流;转化输出流为OutputStreamWriter,把字符流转化为字节流。
java的转换流、压缩流、序列化流、打印流
应用场景:字节流想要使用字符流中的方法则使用转换流。
例如,使用转换输入流读取文件:
一个ANSI编码的文件:
java的转换流、压缩流、序列化流、打印流

public class MyApp {
    public static void main(String[] args) throws IOException {
        //1.创建对象并指定字符编码读取
        InputStreamReader isr = new InputStreamReader(new FileInputStream("javase-learning\\src\\example\\org\\domain\\c(ANSI).txt"),"GBK");
        //2.读取数据
        int ch;
        while((ch = isr.read())!= -1){
            System.out.println((char)ch);
        }
        //3.释放资源
        isr.close();
    }
}

java的转换流、压缩流、序列化流、打印流
上述这种写法JDK11有了替代方案,使用FileReader,其实FileReader是InputStreamReader的子类。。

public class MyApp {
    public static void main(String[] args) throws IOException {
        //1.创建对象并指定字符编码读取
       FileReader fr = new FileReader("javase-learning\\src\\example\\org\\domain\\c(ANSI).txt", Charset.forName("GBK"));
        //2.读取数据
        int ch;
        while((ch = fr.read())!= -1){
            System.out.println((char)ch);
        }
        //3.释放资源
        fr.close();
    }
}

再例如,使用转化输出流写文件:

public class MyApp {
    public static void main(String[] args) throws IOException {
        //1.创建对象并指定字符编码
       OutputStreamWriter osw = new  OutputStreamWriter(new FileOutputStream("javase-learning\\src\\example\\org\\domain\\d.txt"), "GBK");
        //2.写出数据
       osw.write("你好你好");
        //3.释放资源
        osw.close();
    }
}

JDK11替代方案:

public class MyApp {
    public static void main(String[] args) throws IOException {
        //1.创建对象并指定字符编码
      FileWriter fw = new  FileWriter("javase-learning\\src\\example\\org\\domain\\d.txt", Charset.forName("GBK"));
        //2.写出数据
       fw.write("你好你好");
        //3.释放资源
        fw.close();
    }
}

再例如,将本地文件的GBK文件转为UTF-8文件:
java的转换流、压缩流、序列化流、打印流

java的转换流、压缩流、序列化流、打印流
注意:上述代码运行后d.txt的内容与b.txt的内容用记事本打开结果相同,且d.txt的编码方式为UTF-8。
二、序列化流和反序列化流
序列化流(ObjectOutputStream,也称对象操作输出流)与反序列化流(ObjectInputStream,也称对象操作输入流)属于字节流,也是高级流,是对基本流的包装。
java的转换流、压缩流、序列化流、打印流
序列化流可以把java中的对象输出到本地文件中。
说明:存储java对象可以用基本流直接存储属性值,还能直接对文件进行修改。而序列化流存储java对象打开文件是看不懂的,而无法直接修改,这样可以防止暂时存储在文件中的数据被用户修改。
(一)序列化流
构造方法:
java的转换流、压缩流、序列化流、打印流
成员方法:
java的转换流、压缩流、序列化流、打印流
例如,新建一个User类:
java的转换流、压缩流、序列化流、打印流
注意:直接使用对象输出流将对象保存到文件中会出现NotSerializableException异常,解决方法是让JavaBean类实现Serializable接口。
java的转换流、压缩流、序列化流、打印流
注意:可以看出实现了Serializable接口不用重写方法,因为Serializable接口中没有抽象方法,是标记型接口,一旦实现了这个接口,就表示当前的类可以被序列化。
java的转换流、压缩流、序列化流、打印流
编写代码实现序列化:
java的转换流、压缩流、序列化流、打印流
结果如下:
java的转换流、压缩流、序列化流、打印流
(二)反序列化流
java的转换流、压缩流、序列化流、打印流
java的转换流、压缩流、序列化流、打印流
注意:
如果将javabean对象通过序列化存入本地文件,如果这时修改javabean类,再去读取原来存储的javabean对象赋给修改后的类创建对象会报错。
为了防止报错,可以在类中定义版本号,这个版本号会存入通过序列化流存入的本地文件。
java的转换流、压缩流、序列化流、打印流
如果不想把某些属性字段保存到本地文件中,可以在该属性字段前加瞬态关键字transient
java的转换流、压缩流、序列化流、打印流
再例如,运用序列化流和反序列化流读写多个对象。
方式一(读之前已知写入了多少个对象):
java的转换流、压缩流、序列化流、打印流
java的转换流、压缩流、序列化流、打印流
方式二(读之前不知道写入了多少个对象):
java的转换流、压缩流、序列化流、打印流
java的转换流、压缩流、序列化流、打印流
补充:
java的转换流、压缩流、序列化流、打印流
三、打印流
四、压缩流文章来源地址https://www.toymoban.com/news/detail-485182.html

到了这里,关于java的转换流、压缩流、序列化流、打印流的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JSON序列化/反序列化,指定自定义字段名key转换注解配置

    实体类案例: 正常序列化和反序列化JSON对应为: 案例: 实体类的属性上面增加@JsonProperty(“字段名”)注解(fastjson) 在springboot请求接口返回对象得到的结果:(因为springboot使用fastjson序列化对象) json字符串为: 实体类属性上增加@JSONField(name = “属性名”)注解(alibaba.fastjson) 代

    2024年02月10日
    浏览(33)
  • SpringBoot序列化、反序列化空字符串为null的三种方式

    SpringBoot项目 方式:①Jackson(推荐)、②切面+反射、③注解+切面+反射 后两种方式,未做返回值的处理。 1、 Jackson正反序列化(推荐) StdConverter 和 JsonSerializer的区别 ENTITY 序列化处理类 反序列化处理类 序列化-转换1 序列化-转换2 Controller 测试 2、切面+反射/3、注解+切面+反

    2024年04月22日
    浏览(44)
  • C#对象二进制序列化优化:位域技术实现极限压缩

    目录 1. 引言 2. 优化过程 2.1. 进程对象定义与初步分析 2.2. 排除Json序列化 2.3. 使用BinaryWriter进行二进制序列化 2.4. 数据类型调整 2.5. 再次数据类型调整与位域优化 3. 优化效果与总结 在操作系统中,进程信息对于系统监控和性能分析至关重要。假设我们需要开发一个监控程序

    2024年01月22日
    浏览(46)
  • 【从入门到起飞】IO高级流(1)(缓冲流,转换流,序列化流,反序列化流)

    🎊专栏【JavaSE】 🍔喜欢的诗句:天行健,君子以自强不息。 🎆音乐分享【如愿】 🎄欢迎并且感谢大家指出小吉的问题🥰 在代码中使用缓冲流(Buffered Streams)有许多好处,特别是在处理I/O操作时,它们可以显著提高性能和效率。缓冲流是一种在内存中创建缓冲区的I/O流,

    2024年02月08日
    浏览(45)
  • 反序列化字符串逃逸(下篇)

    这里承接上篇文章反序列化字符串逃逸(上篇)-CSDN博客带大家学习反序列化字符串逃逸减少,没有看过的可以先去看看,不会吃亏。 例题: ?php highlight_file(__FILE__); error_reporting(0); function filter($name){     $safe=array(\\\"flag\\\",\\\"php\\\");     $name=str_replace($safe,\\\"hk\\\",$name);     return $

    2024年01月22日
    浏览(42)
  • PHP反序列化漏洞-字符串逃逸

    字符串逃逸(闭合) 字符串逃逸(闭合)是一种在反序列化函数可控的情况下,通过修改序列化字符串中的敏感字符来达到字符串逃逸的方法。 具体而言,可以通过修改变量名等个数,使得序列化字符串中的字符个数与实际变量值个数不一致 。由于反序列化机制要求字符串

    2024年01月20日
    浏览(57)
  • Json-序列化字符串时间格式问题

    最近C#中需要将实体进行json序列化,使用了Newtonsoft.Json 序列化出来的Json字符串有两个问题 1.没有进行格式化,对使用人员不友好; 2.时间字段形式为数字形式; ​​ 查了一下网上对于时间字段建议先转换成字符串,再json序列化,但是发现可以通过自定义时间格式进行json序

    2024年02月19日
    浏览(42)
  • Web开发模式、API接口、restful规范、序列化和反序列化、drf安装和快速使用、路由转换器(复习)

    一 Web开发模式 1. 前后端混合开发模式 2.前后端分离开发模式 二 API接口 三 restful规范 四 序列化和反序列化 五 drf安装和快速使用

    2024年02月10日
    浏览(44)
  • [UUCTF 2022 新生赛]ezpop - 反序列化(字符串逃逸)【***】

    题目代码:

    2024年02月07日
    浏览(45)
  • Java序列化和反序列化

    目录 一、序列化和反序列化 二、Java序列化演示 三、反序列化漏洞 1、含义 ​序列化就是内存中的对象写入到IO流中,保存的格式可以是二进制或者文本内容。反序列化就是IO流还原成对象。 2、用途 (1)传输网络对象 (2)保存Session 1、序列化 java.io.ObjectOutputStream代表对象

    2023年04月25日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包