了解 Java 序列化

2023-12-26

我正在尝试比较标准的 Java 反序列化。并询问这是否是正确的方法。我写了以下课程:

//{"first", 1234.1234, 21341234, 234123412341234124L, "fifth"}
public class ArrayInputStreamStub extends InputStream{
    public int[] arr = new int[260];
    private int reader = 0;

    public ArrayInputStreamStub(){
        reader[0] = -84;
        //...
    }

    @Override
    public int read() throws IOException {
        return arr[reader++];
    }

    public void reset() {
        reader = 0;
    }
}

我有相同的 HashMap 存根。

//{("first", 1), ("second", 2), ("third", 3), ("fourth", 4), ("fifth", 5)}
public class HashMapInputStreamStub extends InputStream{
    //...
}

现在我的基准如下所示:

public InputStreamStub is;
public ArrayInputStreamStub ais;

@Setup
public void setup(){
    is = new InputStreamStub();
    ais = new ArrayInputStreamStub();
}

@Benchmark
@OutputTimeUnit(TimeUnit.MICROSECONDS)
@BenchmarkMode(Mode.AverageTime)
public void measureDeserializeHashMap(Blackhole bh){
    try {
        ObjectInputStream ois = new ObjectInputStream(is);
        Map<String, Integer> schema = (Map<String, Integer>) ois.readObject();
        is.reset();
        bh.consume(schema);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

@Benchmark
@OutputTimeUnit(TimeUnit.MICROSECONDS)
@BenchmarkMode(Mode.AverageTime)
public void measureDeserializeArray(Blackhole bh){
    try {
        ObjectInputStream ois = new ObjectInputStream(ais);
        Object[] array = (Object[]) ois.readObject();
        ais.reset();
        bh.consume(array);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

我得到的结果如下:

Benchmark                              Mode  Cnt   Score   Error  Units
MyBenchmark.measureDeserializeArray    avgt    5  15.940 ± 0.044  us/op
MyBenchmark.measureDeserializeHashMap  avgt    5  12.118 ± 0.057  us/op

接下来的时间只需约 10 微秒。我跑了-prof gc,结果几乎一样。

问题是这个测量正确吗?这些简单对象的序列化大约需要 10 微秒?


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

了解 Java 序列化 的相关文章

随机推荐

  • 如何修复 Python Mechanize 中的编码?

    这是示例代码 from mechanize import Browser br Browser page br open http hunters tclans ru news php readmore 2 br form br forms
  • ASP MVC 3 中一个视图中的两个模型

    我有 2 个型号 public class Person public int PersonID get set public string PersonName get set public class Order public int
  • 从 GCP 设置文档运行“Hello Cloud Run with Python”时,日志中出现“[CRITICAL] WORKER TIMEOUT”

    继教程在这里 https codelabs developers google com codelabs cloud run hello python3我有以下2个文件 app py from flask import Flask requ
  • 如何根据其他列的条件用另一列的值填充列?

    假设我们在 pandas 中有一个数据框 如下所示 col1 col2 col3 col4 22 Nan 23 56 12 54 22 36 48 Nan 2 45 76 32 13 6 23 Nan 43 8 67 54 56 64 16
  • 如何在Vue中加载外部CSS

    我创建了一个Vue项目与Typescript具有类风格的组件 我需要包含一些外部 CSS 文件 例如来自Amazon S3 CSS 似乎没有加载 在网络部分我可以看到它 我建议你使用preprocessor Install SASS npm
  • 如何让 wpf 工具包数据网格在绑定到数据集时显示新行

    有没有办法获取wpf工具包DataGrid当绑定到 a 时显示新行DataSet 换句话说 我有一个DataGrid 我已经设置了它的ItemsSource to a DataTable 一切似乎都工作正常 除了我无法让网格显示我添加到的行
  • 使用 asynctask 加载图像时 Android 列表视图中的奇怪行为

    我希望任何人都可以帮助我解决我遇到的 ListView 问题 昨天我一直在用头撞铁墙 因为我不知道问题出在哪里 这本来不是我的项目 这使得它变得更加困难 我有一个列表视图 我想在其中加载联系人行 在每行的左侧 我想 下载 异步加载图像 为此
  • 在 OpenCV 3.0 中计算密集 SIFT 特征

    从 3 0 版本开始 DenseFeatureDetector 不再可用 有人可以告诉我如何在 OpenCV 3 0 中计算 Dense SIFT 特征吗 我在文档中找不到它 预先非常感谢您 您可以传递一个列表cv2 KeyPoints t
  • 为什么服务器端Javascript没有被广泛使用? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 拦截并过滤HTTP请求

    我想拦截 嗅探传入的 HTTP 请求并过滤 修改它们的内容 在它们到达应用程序之前 Fiddler 似乎有这个功能 但为了集成和可移植性 我宁愿有一些 Java C 库来做到这一点 例如 JPCAP 它拦截 IP 数据包 但是 如上所述 我
  • 如何在条件展开转场中传递数据?

    我尝试建立一个RSS阅读器 在 添加提要 页面上 如果我点击 添加 按钮 我希望检查提要是否已成功添加 如果添加了 则触发unwind segue 并返回主页 如果没有添加 则停留在当前页面 我知道我可以在 添加 按钮上构建 IBActio
  • 如何禁用 Tmux 中的键绑定

    使用 Tmux 和 Vim 有时很痛苦 对我来说 冲突之一是Control S 我在 Vim 中使用它来分割打开缓冲区 但是当使用 Tmux 时 嗯 Tmux 用它做了一些愚蠢的事情 我不明白其目的是什么 但基本上 当C s在 Tmux 中
  • PHP文件下载问题

    我目前在用户下载存储在我的服务器上的文件时遇到一些问题 我设置了代码 以便在用户点击下载按钮后自动下载文件 它适用于所有文件 但当大小超过 30 MB 时 就会出现问题 用户下载有限制吗 另外 我已经提供了示例代码 并且想知道是否有比使用
  • Python 3.4 中“强制转换”为 int

    我正在用 Python 3 4 编写一些简单的游戏 我对 Python 完全陌生 代码如下 def shapeAt self x y return self board y Board BoardWidth x 抛出错误 TypeError
  • 离子段仅在点击内容输入后改变

    我正在使用 ionicv2 和 Adob e Creative SDK 构建照片编辑应用程序 我已经成功实现了创意SDK C SDK 成功返回编辑文件的 url 后 我会推送包含段的页面以及文件 URL 问题出在第二页上 当我单击该段时 它
  • 使用 PHP-EWS 访问另一个邮箱日历事件

    在 PHP EWS 库中 https github com jamesiarmes php ews https github com jamesiarmes php ews 我可以使用以下代码访问特定用户的日历事件 https github
  • 将编程语言嵌入到程序中[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 是否可以让滚动边距顶部在 Safari 中工作?

    我在锚点上使用滚动边距顶部来为我的粘性标题添加空间 但 Safari 不支持它 这些文档在这里 https developer mozilla org en US docs Web CSS scroll margin https devel
  • Kotlin 文档中未解决的@sample

    例如 当我检查 Kotlin 文档时Collections map Intellij Idea 无法解析文档中提到的参考 我应该向我的项目添加什么才能使其正常工作 这是一个错误 https youtrack jetbrains com is
  • 了解 Java 序列化

    我正在尝试比较标准的 Java 反序列化 并询问这是否是正确的方法 我写了以下课程 first 1234 1234 21341234 234123412341234124L fifth public class ArrayInputStre