分块然后合并 jar 文件时遇到问题
Facing issue while chunking then merging the jar files
我有一个 jar 文件,例如 apache-cassandra-3.11.6.jar。
首先,我 split/chunked 放入多个罐子,如下所示:
apache-cassandra1.jar
阿帕奇-cassandra2.jar
阿帕奇-cassandra3.jar
阿帕奇-cassandra4.jar
阿帕奇-cassandra5.jar
阿帕奇卡桑德拉6.jar
然后我将它们重新组合成新的 Jar 文件,即 apache-cassandra_Merged.jar。
现在问题来了。
当我将原始 jar 文件即 apache-cassandra-3.11.6.jar 与新的 Jar 文件即 apache-cassandra_Merged.jar 进行比较时。则不匹配。
新创建的jar文件是apache-cassandra_Merged.jar,体积也变小了
请在下面找到我的代码供您参考:
/// Chunking/spliting into mutiple jars
Path path = Paths.get("/Original_Jar/apache-cassandra-3.11.6.jar");
byte [] data = Files.readAllBytes(path); // Will read all bytes at once
现在把总字节数分成相等的部分,然后一个一个地写入每个小罐子里。
int count = 0;
for(byte[] rangeData : Arrays.copyOfRange(data, rangeSTART, rangeEND)){
FileOutputStream fileOutputStream1 = new FileOutputStream("/Cassandra_Image/Chunked_Jar/apache-cassandra"+count+".jar");
fileOutputStream1.write(rangeData);
}
//合并回一个jar
对于合并,我使用了相同的方式。为每个 small/chunked 个罐子创建字节数组,并一个一个地写入 FileOutputStream("/Merged_Jar/apache-cassandra_Merged.jar")。
请让我知道我是否应该使用其他一些 method/algorithm 来拆分 jar 并重新组装它,这将确保分块和合并后数据的原创性。
注意:实际上我想将罐子转移到任何 server/directory 我应该转移一个尺寸有限的罐子的地方所以对于大尺寸的罐子我需要分成小罐子一个一个地发送然后再次在目标 directory/place 中重新组装它们,它应该和原来的 jar 一样。
提前致谢。
这可能不是答案,但我为您提供了一个信息。 Java 还提供打包格式,您可以在其中压缩 jar 文件,然后您可以使用 unpack 解压缩。
该工具称为 pack200.
如何压缩
<java_location>...\jre\lib>pack200 -J-Xmx256m small.jar.gz big.jar
如何解压
<java_location>...\jre\lib>unpack200 small.jar.gz big.jar
您可以参考以下链接。
https://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/pack200.html
https://docs.oracle.com/javase/7/docs/technotes/tools/share/unpack200.html
我可以使用 shell 脚本解决问题。
通过我的 java 代码在我的 shell 脚本文件和 运行 中编写下面的代码。
split -b 1000000 src.jar target.jar
cat src.jaraa src.jarab src.jarac src.jarad src.jarae > merged.jar
并且与 sha256 校验和等任何算法进行比较都可以正常工作并且显示相等。大小也相等。
我有一个 jar 文件,例如 apache-cassandra-3.11.6.jar。 首先,我 split/chunked 放入多个罐子,如下所示:
apache-cassandra1.jar 阿帕奇-cassandra2.jar 阿帕奇-cassandra3.jar 阿帕奇-cassandra4.jar 阿帕奇-cassandra5.jar 阿帕奇卡桑德拉6.jar
然后我将它们重新组合成新的 Jar 文件,即 apache-cassandra_Merged.jar。 现在问题来了。
当我将原始 jar 文件即 apache-cassandra-3.11.6.jar 与新的 Jar 文件即 apache-cassandra_Merged.jar 进行比较时。则不匹配。
新创建的jar文件是apache-cassandra_Merged.jar,体积也变小了
请在下面找到我的代码供您参考:
/// Chunking/spliting into mutiple jars
Path path = Paths.get("/Original_Jar/apache-cassandra-3.11.6.jar");
byte [] data = Files.readAllBytes(path); // Will read all bytes at once
现在把总字节数分成相等的部分,然后一个一个地写入每个小罐子里。
int count = 0;
for(byte[] rangeData : Arrays.copyOfRange(data, rangeSTART, rangeEND)){
FileOutputStream fileOutputStream1 = new FileOutputStream("/Cassandra_Image/Chunked_Jar/apache-cassandra"+count+".jar");
fileOutputStream1.write(rangeData);
}
//合并回一个jar 对于合并,我使用了相同的方式。为每个 small/chunked 个罐子创建字节数组,并一个一个地写入 FileOutputStream("/Merged_Jar/apache-cassandra_Merged.jar")。
请让我知道我是否应该使用其他一些 method/algorithm 来拆分 jar 并重新组装它,这将确保分块和合并后数据的原创性。
注意:实际上我想将罐子转移到任何 server/directory 我应该转移一个尺寸有限的罐子的地方所以对于大尺寸的罐子我需要分成小罐子一个一个地发送然后再次在目标 directory/place 中重新组装它们,它应该和原来的 jar 一样。
提前致谢。
这可能不是答案,但我为您提供了一个信息。 Java 还提供打包格式,您可以在其中压缩 jar 文件,然后您可以使用 unpack 解压缩。 该工具称为 pack200.
如何压缩
<java_location>...\jre\lib>pack200 -J-Xmx256m small.jar.gz big.jar
如何解压
<java_location>...\jre\lib>unpack200 small.jar.gz big.jar
您可以参考以下链接。
https://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/pack200.html
https://docs.oracle.com/javase/7/docs/technotes/tools/share/unpack200.html
我可以使用 shell 脚本解决问题。 通过我的 java 代码在我的 shell 脚本文件和 运行 中编写下面的代码。
split -b 1000000 src.jar target.jar
cat src.jaraa src.jarab src.jarac src.jarad src.jarae > merged.jar
并且与 sha256 校验和等任何算法进行比较都可以正常工作并且显示相等。大小也相等。