关于java序列化中的一个细节

java序列化机制的可以参考很多资料了,最近在看的时候发现了一些问题。

1.

默认的序列化机制,很多书里讲到序列化类只序列化类名,实例变量,不会实例化类变量(static)和瞬态变量(transient).

我使用1.6,1.7,1.8测试了一下,static都是可以被序列化的。

测试代码:

 1 public class Logg implements Serializable{
 2
 3     private static String name;
 4     private transient String pwd;
 5
 6     public void setName(String pwd){
 7            Logg.name=name;
 8     }
 9
10     public void setPwd(String pwd){
11            this.pwd=pwd;
12     }
13
14
15     public String toString() {
16         return "name="+name+",pwd="+pwd;
17     }
18 }    
 1 ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("log.dat"));
 2 ObjectInputStream in = new ObjectInputStream(new FileInputStream("log.dat"));
 3
 4 Logg logg = new Logg();
 5 logg.setName("test");
 6 logg.setPwd("111111");
 7
 8 out.writeObject(logg);
 9 out.close();
10 Logg log = (Logg)in.readObject();
11 in.close();
12 System.out.println(log.toString());
时间: 2024-10-28 16:11:52

关于java序列化中的一个细节的相关文章

如何在java代码中调用一个web项目jsp或者servlet

有时候需要调用一个web项目的jsp或者servlet,但是执行内部的代码,并不是打开jsp,例如需要在一段java代码中清除一个web项目中的缓存,那么可以把清除缓存的代码放在该web项目的一个servlet中,只需要执行如下代码: URL url = new URL("http://192.168.2.123:8080/sace/ClearCache"); url.openStream(); openStream() 执行一次相当于一次URL请求,其中url.openStream(

Java项目中每一个类都可以有一个main方法

Java项目中每一个类都可以有一个main方法,但只有一个main方法会被执行,其他main方法可以对类进行单元测试. public class StaticTest { public static void main(String[] args) { Employee[] staff=new Employee[3]; staff[0]=new Employee("Tom",40000); staff[1]=new Employee("Dick",60000); s

Java 序列化对象的一个使用案例

<Effective Java>中序列化一节关于java的序列化存在如下说法: 对象序列化(object serialization)API,它提供了一个框架,用来将对象编码成字节流(serializing),并从字节流编码中重新构建对象(deserializing).一旦对象被序列化后,它的编码就可以从一台正在运行的jvm传到另一台jvm上,或者被存储在磁盘上,供以后反序列化时用(如tomcat的session的可持久化).序列化技术为远程通信提供了标准的线路级对象表示法,也为JavaBea

Java循环中删除一个列表元素

本文主要想讲述一下我对之前看到一篇文章的说法.假设跟你的想法有出入,欢迎留言.一起讨论. #3. 在循环中删除一个列表元素 考虑以下的代码.迭代过程中删除元素: ArrayList<String> list = new ArrayList<String>(Arrays.asList("a", "b", "c", "d")); for (int i = 0; i < list.size(); i++

hashMap源码中的一个细节问题

public V put(K key, V value) {        if (key == null)           return putForNullKey(value);        int hash = hash(key.hashCode());         int i = indexFor(hash, table.length);        for (Entry<K,V> e = table[i]; e != null; e = e.next) {        

Java序列化中的SerialVersionUid

版权声明:本文为博主fbysss原创文章,转载请注明出处 作者:fbysssmsn:jameslast[email protected]  blog:blog.csdn.NET/fbysss声明:本文由fbysss原创,转载请注明出处关键字:SerialVersionUid 序列化 一.前言 SerialVersionUid,简言之,其目的是序列化对象版本控制,有关各版本反序列化时是否兼容.如果在新版本中这个值修改了,新版本就不兼容旧版本,反序列化时会抛出InvalidClassExceptio

java集合中的一个移除数据陷阱(遍历集合自身并同时删除被遍历数据)

下面是网上的其他解释,更能从本质上解释原因:Iterator 是工作在一个独立的线程中,并且拥有一个 mutex 锁. Iterator 被创建之后会建立一个指向原来对象的单链索引表,当原来的对象数量发生变化时,这个索引表的内容不会同步改变,所以当索引指针往后移动的时候就找不到要迭代的对象,所以按照 fail-fast 原则 Iterator 会马上抛出 java.util.ConcurrentModificationException 异常.所以 Iterator 在工作的时候是不允许被迭代的

java 文件中 定义一个字符串,它的默认编码是什么?

.java 文件的编码就是 String 字符串的编码 File 文件的编码就是 文件内容的编码 request 的设置的编码就是inputstream 的编码 jvm 的默认编码(the default charset of this Java virtual machine)为: import java.nio.charset.Charset; Charset.defaultCharset(); @Test public void charsetTest() { String s0 = "汉

java集合中某一个元素出现的次数

int count = Collections.frequency(list, key); java的内置方法 原文地址:https://www.cnblogs.com/wysAC666/p/10252676.html