在写入对象文件的过程中,采用了txt文件,发现文件乱码,引发了思考。

首先需要理解好IO流是如何处理文件的。

1.ObjectOutputStream 对Java对象进行序列化处理,处理后的数据,不是文本数据,

所以,该数据保存到文件中,用文本编辑器打开,必然是乱码。

2.输出流,在写入之后,一般都会调用flush方法,将缓冲区的数据刷到IO中去

(当然,楼主的目的地是硬盘文件中)。IO读写,一般情况下,操作系统也会建立一定大小的缓冲区。

3.输出流,在所有写入操作都做完后,应该关闭IO流,调用close方法。

除了可以回收系统资源外,也会强制刷新系统缓冲区中的数据至硬盘。

4.object_in引用对应的是输入流对象,流是流动的,当你上面写入一个对象到文件中后,

下面就只能从那个文件中读取一个对象,再调用读取方法,什么也读不到。

所以,System.out.println(object_in.readObject());的参数应该是li。

5.输入流在读取完成后,也要进行关闭,回收系统资源。

同时一定要记得关闭资源

最后,针对之前说的乱码问题,我上面已经说明了,

各位应该仔细理解Java对象的序列话操作到底干了什么。

它不是简单的把对象属性值写入IO流中,而是按照一定的数据格式写入的。

而这种格式,不是记事本、写字板、Word等文本编辑器能够识别的,

因为,这些数据,压根就不是文本数据。

只有使用相同版本的Java的ObjectInputStream来进行读取操作。

并且,流数据,在没有缓冲区的情况下,是不能读取重复数据的。

也就是说,如果,我的文本文件中,存放12345这五个字符,

那么,我用流读取一个字符,第一个是字符1,第二次读取,必然是字符2,

不可能还是字符1,除非你用带缓冲区缓的流对象,这样,你在读取前先做标记,

读取完了,可以回退到标记处,重复读取数据,

当然,数据的当前位置和标记位置之间的距离不能超过缓冲区的大小。

package cn.jd.io;

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.util.Date;

/*

* 对象流:

* 1先写出后读取

* 2读取的顺序和写出保持一致

* 3不是所有的对象都可以序列化Serializable

*/

public class ObjectTest3 {

public static void main(String[] args) throws IOException, ClassNotFoundException {

ObjectOutputStream oos=

new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("obj.ser")));

oos.writeUTF("我太难了");

oos.writeInt(18);

oos.writeBoolean(false);

//加入对象

oos.writeObject("希望世界和平");

oos.writeObject(new Date());

Employee emp=new Employee("小二",400);

oos.writeObject(emp);

oos.flush();

oos.close();

ObjectInputStream ois=

new ObjectInputStream(new BufferedInputStream(new FileInputStream("obj.ser")));

String msg=ois.readUTF();

int age=ois.readInt();

boolean flag=ois.readBoolean();

Object str=ois.readObject();

Object date=ois.readObject();

Object employee=ois.readObject();

//接下来我们就将类型还原,这里我们必须加上类型转换

if(str instanceof String) {

String strObj=(String)str;

// System.out.println(strObj);

}

if(date instanceof Date) {

Date dateObj=(Date)date;

// System.out.println(dateObj);

}

if(employee instanceof Employee) {

Employee empObj=(Employee)employee;

System.out.println(empObj.getName()+"-->"+empObj.getSalary());

}

// System.out.println(msg);

ois.close();

}

}https://www.zhihu.com/video/1229752143528869888

java写出文本文档乱码_对象流如何写出到文件以及为什么乱码相关推荐

  1. java docx文档解析_带有docx4j的Java Word(.docx)文档

    java docx文档解析 几个月前,我需要创建一个包含许多表和段落的动态Word文档. 过去,我曾使用POI来实现此目的,但是我发现它很难使用,并且在创建更复杂的文档时对我来说效果不佳. 因此,对于 ...

  2. java 接口文档工具_一款Java基于注释的接口文档生成工具

    一. 痛点 你还在手动维护接口文档嘛,花一个下午不停的复制粘贴代码里面的注释 接口字段变动,还得去更新文档,更新不及时导致文档不同步 或者你使用了swagger之类的基于注解,依靠运行时的文档工具,看 ...

  3. java添加文档注释_添加Java文档注释

    一.在Eclipse中add javadoc comment的快捷键为: 快捷键为:ALT + SHIFT +J 二.Window-->Preferences-->General--> ...

  4. java 独立文档标签_怎么将带图片和表格的html标签转换为docx文档---java实现

    有人搞过将带图片和表格的html标签转换为docx文档吗?我转换为doc文档 wps打开不显示图片 office2016可以 2013不可以 现在想换为docx文档 有没有实现的?XDOC-Word文 ...

  5. java word 文档合并_如何通过java将多个word文档合成一个wor

    展开全部 国内有个免费32313133353236313431303231363533e78988e69d8331333431356133的jar(Free Spire.Doc for Java),可 ...

  6. java 两份文档相似性_两个数据集之间的相似百分比

    How to find the similarity (not correlation) between two datasets? 我无法找到匹配数据集之间的相似性 . 我有一个主数据集,我想测试相 ...

  7. java 性能测试文档模板_Java中IO字节流基本操作(复制文件)并测试性能

    此次案例将以复制文件的形式来演示IO字节流的基本操作,复制一个mp3文件,文件信息如下图: main方法测试 public static void main(String[] args) throws ...

  8. s3 java sdk_s3javasdk文档.pdf

    s3javasdk文档 S3 Java SDK 文档 前言 简介 对象存储S3接口 Java SDK采用了开源的aws­java­sdk­s3. 本文档主要介绍SDK的安装.使用与注意事项. 假设您已 ...

  9. 【Java wrod文档导出 返回浏览器下载读取word文档】文档流转IO流

    在工作当中会有很多奇奇怪怪的需求 比如把数据库数据 导出word文档,在此之前发表过一篇 导出ecxle表格的文章,经过查询资料 发现还是很容易实现的 . 我们一共可以分为两个部分 一.把数据库的数据 ...

最新文章

  1. python最大公约数和最小公倍数的求法_最大公约数和最小公倍数的求法分析
  2. java元婴期(26)----java进阶(mybatis(5)---spring和mybatis整合(重点)逆向工程(会用))
  3. 设计模式的理解:解释器模式 Interpreter
  4. sql 相加_SQL多表查询
  5. 要重复多少次变成潜意识_说了多少次了!通过学校区域一定要......
  6. python range函数范围_Python range函数
  7. python redis模块connectionerror_ConnectionError:Error 2连接到Python/Django Redis中的unix套接字...
  8. 免费干货课程!发放官方证书!参与更有礼品相送!戳进绝不后悔~
  9. Deepin 2015 安装惠普打印机驱动
  10. Bailian1193 内存分配【数据结构】
  11. qt 串口粘包_QT C++ TCP大文件高效传输高效 解决粘包问题
  12. 【Git】Failed to connect to github.com port 443 after 21092 ms: Connection refused
  13. java中 Object转换成 int 类型。
  14. 3D GAME PROGRAMMING WITH DIRECTX11 (1)
  15. problem: ERROR cluster.YarnClientSchedulerBackend: Yarn application has already exited with state
  16. flac格式歌曲如何转换成mp3格式,flac转mp3详细图文教程
  17. IC设计书籍信息收集
  18. 不是Nvidia(英伟达)显卡可以安装CUDA跑深度学习算法吗?
  19. HTML css实现翻页效果,一个纯CSS3实现的酷炫翻书效果
  20. 华硕和兰博基尼将发布iPhone的对手

热门文章

  1. PyQt5+eric6之旅(四) - 信号与槽的绑定
  2. tornado 入门
  3. 黄聪:TortoiseGit(乌龟git)保存用户名密码的方法
  4. 滚动条的一些常见问题
  5. Linux RAR 安装和使用详细说明
  6. 异步委托实现多线程winform控件编程
  7. [C# Control] 仿RAR式进度条 (RarProgressBar)
  8. H.265的NALU
  9. java 实现hashmap_Java集合(十)实现Map接口的HashMap
  10. 你是如何自学 Python 的?