在分块然后合并jar文件时遇到问题

2020年10月31日 23点热度 0条评论

我有一个jar文件,例如apache-cassandra-3.11.6.jar。
首先,我将它分成多个块,如下所示:

apache-cassandra1.jar
apache-cassandra2.jar
apache-cassandra3.jar
apache-cassandra4.jar
apache-cassandra5.jar
apache-cassandra6.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创建一个字节数组,并一一写入到FileOutputStream(“ / Merged_Jar / apache-cassandra_Merged.jar”)中。

请让我知道是否我应该使用其他方法/算法来拆分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