Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.IOException;
- import java.nio.file.Files;
- import java.nio.file.Paths;
- import java.nio.file.Path;
- import java.util.zip.CRC32;
- import java.util.zip.Inflater;
- import java.util.zip.DataFormatException;
- public class MoveAttachment {
- private int new_dcom_size;
- private Inflater decompresser = new Inflater(true);
- private CRC32 checksum_worker = new CRC32();
- private byte[] data_bytes;
- private int dbtOffset;
- private int dbtSize;
- public void setInput(String inputFile) throws IOException
- {
- Path path = Paths.get(inputFile);
- byte[] data = Files.readAllBytes(path);
- setInput(data);
- }
- public void setInput(byte[] paramArrayOfByte)
- {
- setInput(paramArrayOfByte, 0, paramArrayOfByte.length);
- }
- public void setInput(byte[] paramArrayOfByte, int btOffset, int btSize)
- {
- if ((paramArrayOfByte == null) || (btSize == 0))
- {
- resetDecompressor();
- return;
- }
- if ((btSize < 8) || (paramArrayOfByte[btOffset] != 31) || (paramArrayOfByte[(btOffset + 1)] != -116))
- {
- this.new_dcom_size = 0;
- }
- else
- {
- this.new_dcom_size = (paramArrayOfByte[(btOffset + 4)] & 0xFF);
- this.new_dcom_size |= (paramArrayOfByte[(btOffset + 5)] & 0xFF) << 8;
- this.new_dcom_size |= (paramArrayOfByte[(btOffset + 6)] & 0xFF) << 16;
- this.new_dcom_size |= (paramArrayOfByte[(btOffset + 7)] & 0xFF) << 24;
- }
- this.data_bytes = paramArrayOfByte;
- this.dbtOffset = btOffset;
- this.dbtSize = btSize;
- if (this.new_dcom_size != 0)
- {
- this.decompresser.setInput(paramArrayOfByte, 8 + this.dbtOffset, btSize - 8);
- }
- }
- private void resetDecompressor()
- {
- this.data_bytes = null;
- this.dbtOffset = 0;
- this.dbtSize = 0;
- this.new_dcom_size = 0;
- this.checksum_worker.reset();
- this.decompresser .reset();
- }
- public byte[] inflate() throws DataFormatException
- {
- if ((this.data_bytes == null) || (this.data_bytes.length == 0)) {
- return null;
- }
- byte[] arrayOfByte = null;
- if (this.new_dcom_size == 0)
- {
- arrayOfByte = this.data_bytes;
- }
- else
- {
- arrayOfByte = new byte[this.new_dcom_size];
- this.decompresser .inflate(arrayOfByte);
- this.checksum_worker.update(arrayOfByte);
- long l = this.checksum_worker.getValue();
- int i = this.dbtOffset + this.dbtSize - 4;
- int j = this.data_bytes[(i++)] & 0xFF;
- j |= (this.data_bytes[(i++)] & 0xFF) << 8;
- j |= (this.data_bytes[(i++)] & 0xFF) << 16;
- j |= (this.data_bytes[(i++)] & 0xFF) << 24;
- if (j != (int)(l & 0xFFFFFFFF))
- {
- resetDecompressor();
- throw new DataFormatException();
- }
- }
- resetDecompressor();
- return arrayOfByte;
- }
- public void end()
- {
- this.decompresser.end();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement