工具

更新时间:2020-06-01 21:08:46

本节介绍Java SDK提供的工具类,包括解析Inventory结果的InverntoryResult和文件校验码生成ContentEtagGenerator、文件哈希树校验码生成器TreeEtagGenerator

InventoryResult

InventoryResult是对类型为INVENTORY_RETRIEVAL的Job结果的解析,包含的成员如下

变量名 类型 描述
vaultRegion String Vault所在Region
vaultId String Vault的ID
inventoryDate Date Inventory建立的时间
archiveList List<ArchiveDescriptor> Archive列表
  1. ServiceCredentials credentials = new ServiceCredentials("[yourAccessKeyID]", "[yourAccessKeySecret]");
  2. // 高级接口的入口对象
  3. ArchiveManager manager = new ArchiveManager(credentials);
  4. // 下载Archive列表信息
  5. manager.downloadInventory("[yourVaultName]", new File("[pathForSavingInventory]"));
  6. // 解析结果
  7. InventoryResult result = new InventoryResult().load(new File("[pathForInventory]"));
  8. for (ArchiveDescriptor descriptor : result.getArchiveList()) {
  9. System.out.println(descriptor.getArchiveId());
  10. }

ContentEtagGenerator

ContentEtagGenerator是用于生成校验码的帮助类,使用方法可参考以下示例。

  • 计算byte[]的校验码
  1. byte[] content = { 0x01, 0x02, 0x03 };
  2. String contentEtag = new ContentEtagGenerator()
  3. .update(content)
  4. .asHex();
  • 计算String的校验码
  1. String content = "abc";
  2. String contentEtag = new ContentEtagGenerator()
  3. .update(content)
  4. .asHex();
  • 计算文件的校验码
  1. File file = new File("[File Path]");
  2. String contentEtag = new ContentEtagGenerator()
  3. .update(file)
  4. .asHex();
  • 计算文件的校验码(指定范围)
  1. // 计算指定文件,偏移量为1024,长度为1024 * 1024的字节内容的校验码。
  2. File file = new File("[File Path]");
  3. String contentEtag = new ContentEtagGenerator()
  4. .update(file, 1024, 1024 * 1024)
  5. .asHex();

其中asHex返回的是校验码的十六进制字符串表达(大写)。

需要注意的是,ContentEtagGenerator的计算是带记忆的,也就是说以下两个例子的结果是相同的。

  1. String contentEtagA = new ContentEtagGenerator()
  2. .update("abc")
  3. .update("123")
  4. .asHex();
  5. String contentEtagB = new ContentEtagGenerator()
  6. .update("abc123")
  7. .asHex();
  8. assertTrue(contentEtagA.equals(contentEtagB));
  • 如果需要清除ContentEtagGenerator的记忆,请调用ContentEtagGenerator的reset()方法

  • 另外,当调用asHex方法之后,ContentEtagGenerator将会被重置,即之后的计算与调用asHex前输入的数据无关。

TreeEtagGenerator

  • 计算byte[]的校验码

不带长度参数:

  1. byte[] content = { 0x01, 0x02, 0x03 };
  2. String contentEtag = new TreeEtagGenerator()
  3. .update(content)
  4. .asHex();

带长度参数:

  1. byte[] content = { 0x01, 0x02, 0x03, 0xFF, 0xFF };
  2. String contentEtag = new TreeEtagGenerator()
  3. .update(content, 3) // 第二个参数是有效数据的长度,否则会引起数据紊乱
  4. .asHex();
  • 计算String的校验码
  1. String content = "abc";
  2. String contentEtag = new TreeEtagGenerator()
  3. .update(content)
  4. .asHex();
  • 计算文件的校验码
  1. File file = new File("[File Path]");
  2. String contentEtag = new TreeEtagGenerator()
  3. .update(file)
  4. .asHex();
  • 计算文件的校验码(指定范围)
  1. // 计算指定文件,偏移量为1024,长度为1024 * 1024的字节内容的校验码。
  2. File file = new File("[File Path]");
  3. String contentEtag = new TreeEtagGenerator()
  4. .update(file, 1024, 1024 * 1024)
  5. .asHex();