前情概要

这篇文章是在上一篇文章如何处理零碎小文件归档的基础上写的。

串行化(也叫序列化)

就像过隧道一样,将需要传输的数据排成一排依次传输;
问: java需要这样的技术,为什么呢?
答: 因为在网络中传输数据的时候,所有的数据都是以字节的形式来传输(存储)。

而Java是面相对象编程,那么对象在内存中可能以各种形式存在。那么,当我们需要网络传输或本地存储(实际就是存到磁盘上去)时,我们必须以某种统一的格式(如:xml格式、文本格式、最常见的就是json格式、以对象方式的串行、以二进制方式存储)转化这些数据;这个过程就叫做串行化。

设计思路

按照如下顺序依次将文件一个一个的解档出来:

  • 读取4个字节的文件名长度
  • 根据读取到的文件名长度,读取文件名
  • 读取4个字节的文件内容长度
  • 根据读取到的文件内容长度,读取文件内容

注:
其中存储的文件名长度和文件内容长度的字节数是可以自己定义的;并且第一次读取文件名的长度时需要判断是否到了文件末尾,如果是则解档结束。

具体实现方案

同上一篇文章的Util类:

 1 package com.mmzs.util;
 2 
 3 /**
 4  * @author: mmzs
 5  * @date:   2018年8月9日
 6  * @Description: 
 7  * 博客地址:https://www.cnblogs.com/mmzs/p/9282412.html
 8  * @version V1.0
 9 */
10 public class Util {
11     /**
12      * 将int转化为字节数组
13      * @return 
14      */
15     public static byte[] int2Bytes(int i){
16         byte[] arr = new byte[4];
17         arr[0] = (byte) i;
18         arr[1] = (byte) (i >> 8);
19         arr[2] = (byte) (i >> 16);
20         arr[3] = (byte) (i >> 24);
21         return arr;
22     }
23     
24     /**
25      * 将字节数组转化为int
26      */
27     public static int bytes2Int(byte[] bytes){
28         int i0 = bytes[0];
29         int i1 = (bytes[1] & 0xFF) << 8;
30         int i2 = (bytes[2] & 0xFF) << 16;
31         int i3 = (bytes[3] & 0xFF) << 24;
32         return i0 | i1 | i2 | i3;
33     }
34 }
Util

相关文章:

  • 2021-12-02
  • 2022-12-23
  • 2021-08-24
  • 2021-12-20
  • 2021-12-09
  • 2021-08-28
  • 2022-12-23
猜你喜欢
  • 2021-04-27
  • 2021-10-31
  • 2022-12-23
  • 2022-12-23
  • 2021-07-09
  • 2022-12-23
  • 2019-12-01
相关资源
相似解决方案