java写出文本文档乱码_对象流如何写出到文件以及为什么乱码
在写入对象文件的过程中,采用了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写出文本文档乱码_对象流如何写出到文件以及为什么乱码相关推荐
- java docx文档解析_带有docx4j的Java Word(.docx)文档
java docx文档解析 几个月前,我需要创建一个包含许多表和段落的动态Word文档. 过去,我曾使用POI来实现此目的,但是我发现它很难使用,并且在创建更复杂的文档时对我来说效果不佳. 因此,对于 ...
- java 接口文档工具_一款Java基于注释的接口文档生成工具
一. 痛点 你还在手动维护接口文档嘛,花一个下午不停的复制粘贴代码里面的注释 接口字段变动,还得去更新文档,更新不及时导致文档不同步 或者你使用了swagger之类的基于注解,依靠运行时的文档工具,看 ...
- java添加文档注释_添加Java文档注释
一.在Eclipse中add javadoc comment的快捷键为: 快捷键为:ALT + SHIFT +J 二.Window-->Preferences-->General--> ...
- java 独立文档标签_怎么将带图片和表格的html标签转换为docx文档---java实现
有人搞过将带图片和表格的html标签转换为docx文档吗?我转换为doc文档 wps打开不显示图片 office2016可以 2013不可以 现在想换为docx文档 有没有实现的?XDOC-Word文 ...
- java word 文档合并_如何通过java将多个word文档合成一个wor
展开全部 国内有个免费32313133353236313431303231363533e78988e69d8331333431356133的jar(Free Spire.Doc for Java),可 ...
- java 两份文档相似性_两个数据集之间的相似百分比
How to find the similarity (not correlation) between two datasets? 我无法找到匹配数据集之间的相似性 . 我有一个主数据集,我想测试相 ...
- java 性能测试文档模板_Java中IO字节流基本操作(复制文件)并测试性能
此次案例将以复制文件的形式来演示IO字节流的基本操作,复制一个mp3文件,文件信息如下图: main方法测试 public static void main(String[] args) throws ...
- s3 java sdk_s3javasdk文档.pdf
s3javasdk文档 S3 Java SDK 文档 前言 简介 对象存储S3接口 Java SDK采用了开源的awsjavasdks3. 本文档主要介绍SDK的安装.使用与注意事项. 假设您已 ...
- 【Java wrod文档导出 返回浏览器下载读取word文档】文档流转IO流
在工作当中会有很多奇奇怪怪的需求 比如把数据库数据 导出word文档,在此之前发表过一篇 导出ecxle表格的文章,经过查询资料 发现还是很容易实现的 . 我们一共可以分为两个部分 一.把数据库的数据 ...
最新文章
- python最大公约数和最小公倍数的求法_最大公约数和最小公倍数的求法分析
- java元婴期(26)----java进阶(mybatis(5)---spring和mybatis整合(重点)逆向工程(会用))
- 设计模式的理解:解释器模式 Interpreter
- sql 相加_SQL多表查询
- 要重复多少次变成潜意识_说了多少次了!通过学校区域一定要......
- python range函数范围_Python range函数
- python redis模块connectionerror_ConnectionError:Error 2连接到Python/Django Redis中的unix套接字...
- 免费干货课程!发放官方证书!参与更有礼品相送!戳进绝不后悔~
- Deepin 2015 安装惠普打印机驱动
- Bailian1193 内存分配【数据结构】
- qt 串口粘包_QT C++ TCP大文件高效传输高效 解决粘包问题
- 【Git】Failed to connect to github.com port 443 after 21092 ms: Connection refused
- java中 Object转换成 int 类型。
- 3D GAME PROGRAMMING WITH DIRECTX11 (1)
- problem: ERROR cluster.YarnClientSchedulerBackend: Yarn application has already exited with state
- flac格式歌曲如何转换成mp3格式,flac转mp3详细图文教程
- IC设计书籍信息收集
- 不是Nvidia(英伟达)显卡可以安装CUDA跑深度学习算法吗?
- HTML css实现翻页效果,一个纯CSS3实现的酷炫翻书效果
- 华硕和兰博基尼将发布iPhone的对手