1.编码这些应该是针对字符而言的,整形及数值这些是默认二进制编码的。因此,无论是硬盘中还是内存中,虽然存的都是二进制码,但是字符的编码方式可以是utf8,unicode等等。
2.序列化只是一种将对象写入字节流的方法而已。可以自己去定义对象的拆分和组装,对象中的字符,写入字节流时,可以选择编码方式,其他的数值型的话,可以直接按照默认的二进制码进行序列化。
参考例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
import java.io.*;
public class SerialTest{
/**
*@paramargs
*@throwsException
*/
public static void main(String[]args) throws Exception{
Employeee1= new Employee( "zhangsan" , 25 , 3000.50 );
Employeee2= new Employee( "lisi" , 24 , 3200.40 );
Employeee3= new Employee( "wangwu" , 27 , 3800.55 );
FileOutputStreamfos= new FileOutputStream( "employee.txt" );
ObjectOutputStreamoos= new ObjectOutputStream(fos);
oos.writeObject(e1);
oos.writeObject(e2);
oos.writeObject(e3);
oos.close();
FileInputStreamfis= new FileInputStream( "employee.txt" );
ObjectInputStreamois= new ObjectInputStream(fis);
Employeee;
for ( int i= 0 ;i< 3 ;i++)
{
e=(Employee)ois.readObject();
System.out.println(e.name+ ":" +e.age+ ":" +e.salary);
}
ois.close();
}
}
class Employee implements Serializable{
Stringname;
int age;
double salary;
transient Threadt= new Thread();
public Employee(Stringname, int age, double salary)
{
this .name=name;
this .age=age;
this .salary=salary;
}
private void writeObject(java.io.ObjectOutputStreamoos) throws IOException
{
oos.writeInt(age);
oos.writeUTF(name);
System.out.println( "WriteObject" );
}
private void readObject(java.io.ObjectInputStreamois) throws IOException
{
age=ois.readInt();
name=ois.readUTF();
System.out.println( "ReadObject" );
}
}
|
比如上面这段序列化的代码
privatevoidwriteObject(java.io.ObjectOutputStreamoos)throwsIOException
{
oos.writeInt(age);
// 数值型可以直接序列化
oos.writeUTF(name);//将name字符串以utf的编码写入字节流
System.out.println("WriteObject");
}
2. 关于utf编码和unicode的关系,这篇帖子讲的比较清楚:
http://blog.csdn.net/shijinupc/article/details/7679930
http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html
个人理解,很多人说utf编码是unicode的一种实现,这样说是没错的,但是实际的文件存储中,也是可以将字符存为不同的编码格式,既可以是unicode, 又可以是utf8, 不仅仅是在硬盘上,也可以在内存里这样做。
PS: 本文请教了rumlee后,纠正了一个错误,这里一般用的数字都是二进制编码,但是也有例外,例如BCD码。
分享到:
相关推荐
将java数据 序列化成PHP的格式 a:4:{s:6:"title2";s:13:"这是标题2";s:6:"title3";s:13:"这是标题3";s:5:"title";s:13:"这是标题1";s:6:"title4";s:13:"这是标题4";} 或者a:1:{i:0;a:1:{s:4:"name";s:10:"这是1321";...
序列化和反序列化的封装类,只要调用就行 序列化和反序列化的封装类 序列化和反序列化的封装类 序列化和反序列化的封装类 序列化和反序列化的封装类
C++ JSON 序列化与反序列化 相关的博客文章见:http://blog.csdn.net/TragicGuy
1.对象序列化的介绍 (1).NET支持对象序列化的几种方式 二进制序列化:对象序列化之后是二进制形式的,通过BinaryFormatter类来实现的,这个类位于System.Runtime.Serialization.Formatters.Binary命名空间下。 SOAP...
序列化和反序列化实例 序列化和反序列化实例 窗体实例 序列化和反序列化实例 序列化和反序列化实例 序列化和反序列化实例 序列化和反序列化实例
Huaffman编码,对输入的任意一串消息序列进行编码
SuperPack,是Shape Security开源的一个新的无模式二进制序列化格式。SuperPack使用了二进制的序列化模式,这意味着会减少负载的大小。采用SuperPack编码格式的一个主要优势在于,与客户端通信的时候不需要预先交换...
cxon:C ++序列化接口和库,采用UTF-8编码的JSON作为默认序列化格式
合肥工业大学信息论与编码课程设计(含py...对一幅 BMP 格式的灰度图像先进行二元霍夫曼编码和游程编码,并根据霍夫曼编码结果将游程编码变换成二进制序列。(象素用霍夫曼编码,游程用等长码)。并设计相应的译码。
C# 数组与序列化C# 数组与序列化C# 数组与序列化C# 数组与序列化C# 数组与序列化C# 数组与序列化C# 数组与序列化
极好的序列化与发序列化代码。可以处理array集合,数组或者单个对象等的序列化与反序列化。
C#关于treeview序列化的一个应用程序
JsonTools是一个不错的JSON序列化和反序列化功能包
msgpack工具库支持二进制格式的序列化和反序列化,速度快,效率更好。
protobuf常用序列化和反序列化API,相关教程:http://blog.csdn.net/tennysonsky/article/details/73920767
反射与序列化示例-序列化窗体所有控件
java序列化(Serializable)的作用和反序列化.doc 有详细的讲解哦。 在什么地方用的到都有说明的.
c#对象序列化与反序列化实例c#对象序列化与反序列化实例c#对象序列化与反序列化实例c#对象序列化与反序列化实例c#对象序列化与反序列化实例c#对象序列化与反序列化实例
基于WindowForm应用程序C#语言通过实际案例实现将对象保存到文件及从已保存的文件中读取对象(直接保存与读取、通过序列化与反序列化方式进行对象保存与读取)
C#中二进制数组h和各种常规数组的转换,二进制序列化和json序列化方法以及对应的反序列化方法的例子,帮助初学者。