栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何获得表示Java对象的序列化字节数?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何获得表示Java对象的序列化字节数?

您可以使用

ObjectOutputStream
和将对象转换为字节数组
ByteArrayOutputStream

public static int sizeof(Object obj) throws IOException {    ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream();    ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteOutputStream);    objectOutputStream.writeObject(obj);    objectOutputStream.flush();    objectOutputStream.close();    return byteOutputStream.toByteArray().length;}

我只是测试了一下。您要计算

Serializable
其大小的对象需要实现(这意味着您可能仅为了获得其大小就必须标记每个对象。这可能是不希望的)。我写了一个快速而肮脏的程序来测试一下:

import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectOutputStream;import java.io.Serializable;public class Sizeof {    public static class Person implements Serializable {        private String name;        private String age;        public Person(String name, String age) { this.name = name; this.age = age;        }        public String getName() { return name;        }        public void setName(String name) { this.name = name;        }        public String getAge() { return age;        }        public void setAge(String age) { this.age = age;        }    }    public static void main(String[] args) {        Person p1 = new Person("Alby", "20");        Person p2 = new Person("VeryLongName", "100");        String s1 = "This is it";        String s2 = "This";        try { System.out.println("p1 " + sizeof(p1)); System.out.println("p2 " + sizeof(p2)); System.out.println("s1 " + sizeof(s1)); System.out.println("s2 " + sizeof(s2));        }        catch(Exception e) { e.printStackTrace();        }    }    public static int sizeof(Object obj) throws IOException {        ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream();        ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteOutputStream);        objectOutputStream.writeObject(obj);        objectOutputStream.flush();        objectOutputStream.close();        return byteOutputStream.toByteArray().length;    }}

这给了我:

p1 85p2 94s1 17s2 11

编辑

Stephen C的答案突出了此方法的一些注意事项。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/516568.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号