【问题标题】:What is serialization in programming? [duplicate]什么是编程中的序列化? [复制]
【发布时间】:2014-01-31 22:57:57
【问题描述】:

在我现在正在处理的 Android 项目中,对象序列化用于存储激活状态。在其中创建了一个设备对象,与激活相关的所有数据都存储在其中,并且该对象存储在内存上的一个文件中。此时序列化进入场景,对象被序列化并存储在文件中。那么什么是序列化,这个词实际上是什么意思呢?这是关于安全性的最佳实践吗?我不能直接将对象存储在文件中吗?

【问题讨论】:

  • 这是在Java的上下文中问的,与Java本身无关。
  • @SimonMokhele 一般来说,更喜欢指向 SO 问题的链接,这有助于避免将来出现死链接。

标签: serialization theory


【解决方案1】:

序列化是很容易查找的东西。它只是在内存中获取二进制对象并将其转换为某种(通常)字符串格式以便可以将其保存到磁盘(或者可能通过网络传输)的过程。它还涉及反序列化过程。

看在您的份上,Java 中有一个标准接口“可序列化”,您应该实现该接口以使类成为可序列化的类。在大多数情况下,只包含基本数据类型或可序列化类型的类您不需要自己手动执行任何操作。

【讨论】:

    【解决方案2】:

    1>考虑到您提出的文件序列化问题:

    加快标准序列化的最简单方法是使用 RandomAccessFile 对象:

    public void testWriteBuffered(TestObject test, String fileName) throws IOException {
      ObjectOutputStream objectOutputStream = null;
      try {
        RandomAccessFile raf = new RandomAccessFile(fileName, "rw");
        FileOutputStream fos = new FileOutputStream(raf.getFD());
        objectOutputStream = new ObjectOutputStream(fos);
        objectOutputStream.writeObject(test);
      } finally {
        if (objectOutputStream != null) {
          objectOutputStream.close();
        }      
    } 
    

    最后我们可以得出几个结论:

    • 不安全的序列化比标准快 23 倍以上 java.io.Serializable的使用

    • 使用 RandomAccessFile 可以加速标准缓冲序列化 几乎是 4 倍

    • Kryo 动态序列化比 手工实现的直接缓冲区。

    参考:Dzone

    我推荐的是使用高效的Java NIO

    2>Android 视角:

    特别是在 android 中,您使用带有 sqlcipher 的 SQL lite 来存储安全数据或带有安全实现的 android 首选项,如果您从 REST API 下载数据集,您应该使用 GSON JACKSON 序列化器/反序列化器!要存储到 SQLlite 中,您可以使用 orm lite 框架

    【讨论】:

      猜你喜欢
      • 2011-01-11
      • 2011-03-03
      • 2010-10-11
      • 2011-07-12
      • 2011-04-14
      • 2011-08-05
      • 1970-01-01
      • 1970-01-01
      • 2013-11-27
      相关资源
      最近更新 更多