Java 类java.util.zip.InflaterOutputStream 实例源码
项目:springboot-shiro-cas-mybatis
文件:CompressionUtils.java
/**
* Inflate the given byte array by {@link #INFLATED_ARRAY_LENGTH}.
*
* @param bytes the bytes
* @return the array as a string with <code>UTF-8</code> encoding
*/
public static String inflate(final byte[] bytes) {
try (ByteArrayInputStream inb = new ByteArrayInputStream(bytes);
ByteArrayOutputStream out = new ByteArrayOutputStream();
InflaterOutputStream ios = new InflaterOutputStream(out);) {
IOUtils.copy(inb, ios);
return new String(out.toByteArray(), UTF8_ENCODING);
} catch (final Exception e) {
throw new RuntimeException(e.getMessage(), e);
}
}
项目:opencron
文件:DigestUtils.java
public static String decompressData(String encdata) {
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
InflaterOutputStream zos = new InflaterOutputStream(bos);
zos.write(getdeBASE64inCodec(encdata));
zos.close();
return new String(bos.toByteArray());
} catch (Exception ex) {
ex.printStackTrace();
return "UNZIP_ERR";
}
}
项目:opencron
文件:DigestUtils.java
public static String decompressData(String encdata, String charset) {
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
InflaterOutputStream zos = new InflaterOutputStream(bos);
zos.write(getdeBASE64inCodec(encdata));
zos.close();
return new String(bos.toByteArray(), charset);
} catch (Exception ex) {
ex.printStackTrace();
return "UNZIP_ERR";
}
}
项目:oscm
文件:SAMLResponseExtractor.java
private String inflate(byte[] decodedBytes) throws IOException {
ByteArrayOutputStream inflatedBytes = new ByteArrayOutputStream();
Inflater inflater = new Inflater(true);
InflaterOutputStream inflaterStream = new InflaterOutputStream(inflatedBytes, inflater);
inflaterStream.write(decodedBytes);
inflaterStream.finish();
return new String(inflatedBytes.toByteArray());
}
项目:exciting-app
文件:CryptUtil.java
public static byte[] decompressData(String encdata) throws Exception {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
InflaterOutputStream zos = new InflaterOutputStream(bos);
byte[] bs = decryptBASE64(encdata);
zos.write(bs);
zos.close();
return bos.toByteArray();
}
项目:Crunched
文件:Utils.java
public static byte[] decompressZlib(byte[] input) {
try {
Inflater decompress = new Inflater();
decompress.setInput(input);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
InflaterOutputStream inflaterOutputStream = new InflaterOutputStream(byteArrayOutputStream, decompress);
inflaterOutputStream.flush();
return byteArrayOutputStream.toByteArray();
} catch (Exception e) {
System.out.println("An error occured while decompressing data");
System.exit(-2);
}
return null;
}
项目:Much-Assembly-Required
文件:TileMap.java
public static TileMap deserialize(JSONObject object) {
TileMap tileMap = new TileMap(World.WORLD_SIZE, World.WORLD_SIZE);
byte[] compressedBytes = Base64.getDecoder().decode((String) object.get("z"));
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Inflater decompressor = new Inflater(true);
InflaterOutputStream inflaterOutputStream = new InflaterOutputStream(baos, decompressor);
inflaterOutputStream.write(compressedBytes);
inflaterOutputStream.close();
byte[] terrain = baos.toByteArray();
for (int x = 0; x < World.WORLD_SIZE; x++) {
for (int y = 0; y < World.WORLD_SIZE; y++) {
tileMap.tiles[x][y] = terrain[x * World.WORLD_SIZE + y];
}
}
return tileMap;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
项目:Much-Assembly-Required
文件:Memory.java
public static Memory deserialize(DBObject obj) {
Memory memory = new Memory(0);
String zipBytesStr = (String) obj.get("zipBytes");
if (zipBytesStr != null) {
byte[] compressedBytes = Base64.getDecoder().decode((String) obj.get("zipBytes"));
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Inflater decompressor = new Inflater(true);
InflaterOutputStream inflaterOutputStream = new InflaterOutputStream(baos, decompressor);
inflaterOutputStream.write(compressedBytes);
inflaterOutputStream.close();
memory.setBytes(baos.toByteArray());
} catch (IOException e) {
e.printStackTrace();
}
} else {
LogManager.LOGGER.severe("Memory was manually deleted");
memory = new Memory(GameServer.INSTANCE.getConfig().getInt("memory_size"));
}
return memory;
}
项目:mdict-parser-java
文件:mdictRes.java
public static byte[] zlib_decompress(byte[] encdata,int offset) {
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
InflaterOutputStream inf = new InflaterOutputStream(out);
inf.write(encdata,offset, encdata.length-offset);
inf.close();
return out.toByteArray();
} catch (Exception ex) {
ex.printStackTrace();
return "ERR".getBytes();
}
}
项目:mdict-parser-java
文件:mdictRes.java
public static byte[] zlib_decompress(byte[] encdata,int offset,int size) {
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
InflaterOutputStream inf = new InflaterOutputStream(out);
inf.write(encdata,offset, size);
inf.close();
return out.toByteArray();
} catch (Exception ex) {
ex.printStackTrace();
return "ERR".getBytes();
}
}
项目:mdict-parser-java
文件:mdict.java
public static byte[] zlib_decompress(byte[] encdata,int offset) {
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
InflaterOutputStream inf = new InflaterOutputStream(out);
inf.write(encdata,offset, encdata.length-offset);
inf.close();
return out.toByteArray();
} catch (Exception ex) {
ex.printStackTrace();
return "ERR".getBytes();
}
}
项目:mdict-parser-java
文件:mdict.java
public static String zlib_decompress_to_str(byte[] encdata,int offset) {
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
InflaterOutputStream inf = new InflaterOutputStream(out);
inf.write(encdata,offset, encdata.length-offset);
inf.close();
return out.toString("ASCII");
} catch (Exception ex) {
ex.printStackTrace();
return "ERR";
}
}
项目:mdict-parser-java
文件:mdict.java
public static byte[] zlib_decompress(byte[] encdata,int offset,int size) {
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
InflaterOutputStream inf = new InflaterOutputStream(out);
inf.write(encdata,offset, size);
inf.close();
return out.toByteArray();
} catch (Exception ex) {
ex.printStackTrace();
show(emptyStr);
return "ERR".getBytes();
}
}
项目:logback-gelf
文件:GelfUdpAppenderTest.java
private JsonNode receiveCompressedMessage() throws IOException {
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
final InflaterOutputStream inflaterOutputStream = new InflaterOutputStream(bos);
inflaterOutputStream.write(server.getReceivedData());
inflaterOutputStream.close();
return new ObjectMapper().readTree(bos.toByteArray());
}
项目:sfs
文件:DumpFileWriter.java
private byte[] inflate(byte[] uncompressed) {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
try (InflaterOutputStream deflaterOutputStream = new InflaterOutputStream(byteArrayOutputStream)) {
deflaterOutputStream.write(uncompressed);
} catch (IOException e) {
throw new RuntimeException(e);
}
return byteArrayOutputStream.toByteArray();
}
项目:CCTweaks-Lua
文件:DataAPI.java
private Object[] inflate(byte[] data) throws LuaException {
if (data.length >= Config.APIs.Data.limit) throw new LuaException("Data is too long");
ByteArrayOutputStream baos = new ByteArrayOutputStream(512);
InflaterOutputStream inos = new InflaterOutputStream(baos, new Inflater(true));
try {
inos.write(data);
inos.finish();
} catch (IOException e) {
throw LuaHelpers.rewriteException(e, "Inflating error");
}
return new Object[]{baos.toByteArray()};
}
项目:FontVerter
文件:Woff1Font.java
protected void readCompressedData(byte[] readData) throws IOException {
if (readData.length == originalLength) {
this.tableData = readData;
return;
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
InflaterOutputStream compressStream = new InflaterOutputStream(out);
compressStream.write(readData);
compressStream.close();
tableData = out.toByteArray();
}
项目:development
文件:SAMLResponseExtractor.java
private String inflate(byte[] decodedBytes) throws IOException {
ByteArrayOutputStream inflatedBytes = new ByteArrayOutputStream();
Inflater inflater = new Inflater(true);
InflaterOutputStream inflaterStream = new InflaterOutputStream(inflatedBytes, inflater);
inflaterStream.write(decodedBytes);
inflaterStream.finish();
return new String(inflatedBytes.toByteArray());
}
项目:VoltDB
文件:CompressionService.java
public static byte[] gunzipBytes(byte[] compressedBytes) throws IOException
{
ByteArrayOutputStream bos = new ByteArrayOutputStream((int)(compressedBytes.length * 1.5));
InflaterOutputStream dos = new InflaterOutputStream(bos);
dos.write(compressedBytes);
dos.close();
return bos.toByteArray();
}
项目:VoltDB
文件:HashinatorLite.java
public static byte[] gunzipBytes(byte[] compressedBytes) throws IOException
{
ByteArrayOutputStream bos = new ByteArrayOutputStream((int)(compressedBytes.length * 1.5));
InflaterOutputStream dos = new InflaterOutputStream(bos);
dos.write(compressedBytes);
dos.close();
return bos.toByteArray();
}
项目:JDA
文件:WebSocketClient.java
@Override
public void onBinaryMessage(WebSocket websocket, byte[] binary) throws IOException, DataFormatException
{
if (!onBufferMessage(binary))
return;
//Thanks to ShadowLordAlpha and Shredder121 for code and debugging.
//Get the compressed message and inflate it
final int size = readBuffer != null ? readBuffer.size() : binary.length;
ByteArrayOutputStream out = new ByteArrayOutputStream(size * 2);
try (InflaterOutputStream decompressor = new InflaterOutputStream(out, zlibContext))
{
if (readBuffer != null)
readBuffer.writeTo(decompressor);
else
decompressor.write(binary);
// send the inflated message to the TextMessage method
onTextMessage(websocket, out.toString("UTF-8"));
}
catch (IOException e)
{
throw (DataFormatException) new DataFormatException("Malformed").initCause(e);
}
finally
{
readBuffer = null;
}
}
项目:sambox
文件:ObjectsStreamTest.java
@Test
public void addItem() throws IOException
{
victim.addItem(context.createIndirectReferenceFor(COSInteger.ZERO));
victim.addItem(context.createIndirectReferenceFor(COSInteger.THREE));
victim.prepareForWriting();
assertEquals(COSName.OBJ_STM.getName(), victim.getNameAsString(COSName.TYPE));
assertEquals(2, victim.getInt(COSName.N));
assertEquals(8, victim.getInt(COSName.FIRST));
ByteArrayOutputStream out = new ByteArrayOutputStream();
IOUtils.copy(victim.getFilteredStream(), new InflaterOutputStream(out));
byte[] data = new byte[] { 49, 32, 48, 32, 50, 32, 50, 32, 48, 32, 51, 32 };
assertArrayEquals(data, out.toByteArray());
}
项目:In-the-Box-Fork
文件:InflaterOutputStreamTest.java
/**
* @tests java.util.zip.InflaterOutputStream#InflaterOutputStream(java.io.OutputStream)
*/
public void test_ConstructorLjava_io_OutputStream() throws IOException {
new InflaterOutputStream(os);
try {
new InflaterOutputStream(null);
fail("Should throw NullPointerException");
} catch (NullPointerException e) {
// expected
}
}
项目:In-the-Box-Fork
文件:InflaterOutputStreamTest.java
/**
* @tests java.util.zip.InflaterOutputStream#close()
*/
public void test_close() throws IOException {
InflaterOutputStream ios = new InflaterOutputStream(os);
ios.close();
// multiple close
ios.close();
}
项目:In-the-Box-Fork
文件:InflaterOutputStreamTest.java
/**
* @tests java.util.zip.InflaterOutputStream#write(int)
*/
public void test_write_I() throws IOException {
int length = compressToBytes(testString);
// uncompress the data stored in the compressedBytes
InflaterOutputStream ios = new InflaterOutputStream(os);
for (int i = 0; i < length; i++) {
ios.write(compressedBytes[i]);
}
String result = new String(os.toByteArray());
assertEquals(testString, result);
}
项目:In-the-Box-Fork
文件:InflaterOutputStreamTest.java
/**
* @tests java.util.zip.InflaterOutputStream#write(int)
*/
public void test_write_I_Illegal() throws IOException {
// write after close
InflaterOutputStream ios = new InflaterOutputStream(os);
ios.close();
try {
ios.write(-1);
fail("Should throw IOException");
} catch (IOException e) {
// expected
}
}
项目:In-the-Box-Fork
文件:InflaterOutputStreamTest.java
/**
* @tests java.util.zip.InflaterOutputStream#write(byte[],int,int)
*/
public void test_write_$BII() throws IOException {
int length = compressToBytes(testString);
// uncompress the data stored in the compressedBytes
InflaterOutputStream ios = new InflaterOutputStream(os);
ios.write(compressedBytes, 0, length);
String result = new String(os.toByteArray());
assertEquals(testString, result);
}
项目:cn1
文件:InflaterOutputStreamTest.java
/**
* @tests java.util.zip.InflaterOutputStream#InflaterOutputStream(java.io.OutputStream)
*/
public void test_ConstructorLjava_io_OutputStream() throws IOException {
new InflaterOutputStream(os);
try {
new InflaterOutputStream(null);
fail("Should throw NullPointerException");
} catch (NullPointerException e) {
// expected
}
}
项目:cn1
文件:InflaterOutputStreamTest.java
/**
* @tests java.util.zip.InflaterOutputStream#close()
*/
public void test_close() throws IOException {
InflaterOutputStream ios = new InflaterOutputStream(os);
ios.close();
// multiple close
ios.close();
}
项目:cn1
文件:InflaterOutputStreamTest.java
/**
* @tests java.util.zip.InflaterOutputStream#write(int)
*/
public void test_write_I() throws IOException {
int length = compressToBytes(testString);
// uncompress the data stored in the compressedBytes
InflaterOutputStream ios = new InflaterOutputStream(os);
for (int i = 0; i < length; i++) {
ios.write(compressedBytes[i]);
}
String result = new String(os.toByteArray());
assertEquals(testString, result);
}
项目:cn1
文件:InflaterOutputStreamTest.java
/**
* @tests java.util.zip.InflaterOutputStream#write(int)
*/
public void test_write_I_Illegal() throws IOException {
// write after close
InflaterOutputStream ios = new InflaterOutputStream(os);
ios.close();
try {
ios.write(-1);
fail("Should throw IOException");
} catch (IOException e) {
// expected
}
}
项目:cn1
文件:InflaterOutputStreamTest.java
/**
* @tests java.util.zip.InflaterOutputStream#write(byte[],int,int)
*/
public void test_write_$BII() throws IOException {
int length = compressToBytes(testString);
// uncompress the data stored in the compressedBytes
InflaterOutputStream ios = new InflaterOutputStream(os);
ios.write(compressedBytes, 0, length);
String result = new String(os.toByteArray());
assertEquals(testString, result);
}
项目:ob1k
文件:DeflateCompressor.java
@Override
public byte[] decompress(final byte[] data) {
if (data == null) {
return null;
}
final ByteArrayOutputStream buffer = new ByteArrayOutputStream(data.length);
final InflaterOutputStream inflaterStream = new InflaterOutputStream(buffer, new Inflater());
try {
inflaterStream.write(data);
inflaterStream.close();
buffer.close();
} catch (final IOException e) {
throw new RuntimeException("failed compressing using deflate", e);
}
return buffer.toByteArray();
}
项目:ddth-cache-adapter
文件:JdkDeflateCompressor.java
/**
* {@inheritDoc}
*
* @throws IOException
*/
@Override
public byte[] decompress(byte[] compressedData) throws IOException {
try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
try (InflaterOutputStream ios = new InflaterOutputStream(baos)) {
ios.write(compressedData);
ios.finish();
return baos.toByteArray();
}
}
}
项目:jopfli
文件:JopfliDeflaterTests.java
private static final byte[] inflate(byte[] data, boolean raw) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
InflaterOutputStream inflaterOut = new InflaterOutputStream(baos, new Inflater(raw));
inflaterOut.write(data);
inflaterOut.close();
return baos.toByteArray();
}
catch(Exception e) {
throw Throwables.propagate(e);
}
}
项目:portalsammler
文件:SecureStore.java
public byte[] getDocument(final DocumentInfo metadata) throws IOException {
final Map<String, String> pointer = this.index.getFilePosition(metadata);
final byte[] buffer = this.readAndDecrypt(pointer.get("f"));
final int offset = Integer.parseInt(pointer.get("o"));
final int size = Integer.parseInt(pointer.get("s"));
final ByteArrayOutputStream result = new ByteArrayOutputStream();
final InflaterOutputStream inflate = new InflaterOutputStream(result);
inflate.write(buffer, offset, size);
inflate.close();
return result.toByteArray();
}
项目:sfs
文件:InflaterEndableWriteStream.java
public InflaterEndableWriteStream(BufferEndableWriteStream delegate) {
this.delegate = delegate;
this.bufferEndableWriteStreamOutputStream = new BufferEndableWriteStreamOutputStream(delegate);
this.inflaterOutputStream = new InflaterOutputStream(bufferEndableWriteStreamOutputStream);
}
项目:ThesaurusParser
文件:QQqpydReader.java
/**
* 读取qq词库文件(qpyd),返回一个包含所以词的list
* @param inputPath : qpyd文件的路径
* @return: 包含词库文件中所有词的一个List<String>
* @throws Exception
*/
public static List<String> readQpydFile(String inputPath) throws Exception
{
List<String> wordList = new ArrayList<String>();
// read qpyd into byte array
ByteArrayOutputStream dataOut = new ByteArrayOutputStream();
FileChannel fChannel = new RandomAccessFile(inputPath, "r").getChannel();
fChannel.transferTo(0, fChannel.size(), Channels.newChannel(dataOut));
fChannel.close();
// qpyd as bytes
ByteBuffer dataRawBytes = ByteBuffer.wrap(dataOut.toByteArray());
dataRawBytes.order(ByteOrder.LITTLE_ENDIAN);
// read info of compressed data
int startZippedDictAddr = dataRawBytes.getInt(0x38);
int zippedDictLength = dataRawBytes.limit() - startZippedDictAddr;
// read zipped qqyd dictionary into byte array
dataOut.reset();
Channels.newChannel(new InflaterOutputStream(dataOut)).write(
ByteBuffer.wrap(dataRawBytes.array(), startZippedDictAddr, zippedDictLength));
// uncompressed qqyd dictionary as bytes
ByteBuffer dataUnzippedBytes = ByteBuffer.wrap(dataOut.toByteArray());
dataUnzippedBytes.order(ByteOrder.LITTLE_ENDIAN);
// for debugging: save unzipped data to *.unzipped file
Channels.newChannel(new FileOutputStream(inputPath + ".unzipped")).write(dataUnzippedBytes);
// stores the start address of actual dictionary data
int unzippedDictStartAddr = -1;
int idx = 0;
byte[] byteArray = dataUnzippedBytes.array();
while (unzippedDictStartAddr == -1 || idx < unzippedDictStartAddr)
{
// read word
int pinyinStartAddr = dataUnzippedBytes.getInt(idx + 0x6);
int pinyinLength = dataUnzippedBytes.get(idx + 0x0) & 0xff;
int wordStartAddr = pinyinStartAddr + pinyinLength;
int wordLength = dataUnzippedBytes.get(idx + 0x1) & 0xff;
if (unzippedDictStartAddr == -1)
{
unzippedDictStartAddr = pinyinStartAddr;
}
String word = new String(Arrays.copyOfRange(byteArray, wordStartAddr, wordStartAddr + wordLength),
"UTF-16LE");
wordList.add(word);
// step up
idx += 0xa;
}
return wordList;
}
项目:lab
文件:QQqpydReader.java
/**
* 读取qq词库文件(qpyd),返回一个包含所以词的list
* @param inputPath : qpyd文件的路径
* @return: 包含词库文件中所有词的一个List<String>
* @throws Exception
*/
public static List<String> readQpydFile(String inputPath) throws Exception
{
List<String> wordList = new ArrayList<String>();
// read qpyd into byte array
ByteArrayOutputStream dataOut = new ByteArrayOutputStream();
FileChannel fChannel = new RandomAccessFile(inputPath, "r").getChannel();
fChannel.transferTo(0, fChannel.size(), Channels.newChannel(dataOut));
fChannel.close();
// qpyd as bytes
ByteBuffer dataRawBytes = ByteBuffer.wrap(dataOut.toByteArray());
dataRawBytes.order(ByteOrder.LITTLE_ENDIAN);
// read info of compressed data
int startZippedDictAddr = dataRawBytes.getInt(0x38);
int zippedDictLength = dataRawBytes.limit() - startZippedDictAddr;
// read zipped qqyd dictionary into byte array
dataOut.reset();
Channels.newChannel(new InflaterOutputStream(dataOut)).write(
ByteBuffer.wrap(dataRawBytes.array(), startZippedDictAddr, zippedDictLength));
// uncompressed qqyd dictionary as bytes
ByteBuffer dataUnzippedBytes = ByteBuffer.wrap(dataOut.toByteArray());
dataUnzippedBytes.order(ByteOrder.LITTLE_ENDIAN);
// for debugging: save unzipped data to *.unzipped file
Channels.newChannel(new FileOutputStream(inputPath + ".unzipped")).write(dataUnzippedBytes);
// stores the start address of actual dictionary data
int unzippedDictStartAddr = -1;
int idx = 0;
byte[] byteArray = dataUnzippedBytes.array();
while (unzippedDictStartAddr == -1 || idx < unzippedDictStartAddr)
{
// read word
int pinyinStartAddr = dataUnzippedBytes.getInt(idx + 0x6);
int pinyinLength = dataUnzippedBytes.get(idx + 0x0) & 0xff;
int wordStartAddr = pinyinStartAddr + pinyinLength;
int wordLength = dataUnzippedBytes.get(idx + 0x1) & 0xff;
if (unzippedDictStartAddr == -1)
{
unzippedDictStartAddr = pinyinStartAddr;
}
String word = new String(Arrays.copyOfRange(byteArray, wordStartAddr, wordStartAddr + wordLength),
"UTF-16LE");
wordList.add(word);
// step up
idx += 0xa;
}
return wordList;
}
项目:lab
文件:QQqpydReader.java
/**
* 读取qq词库文件(qpyd),返回一个包含所以词的list
* @param inputPath : qpyd文件的路径
* @return: 包含词库文件中所有词的一个List<String>
* @throws Exception
*/
public static List<String> readQpydFile(String inputPath) throws Exception
{
List<String> wordList = new ArrayList<String>();
// read qpyd into byte array
ByteArrayOutputStream dataOut = new ByteArrayOutputStream();
FileChannel fChannel = new RandomAccessFile(inputPath, "r").getChannel();
fChannel.transferTo(0, fChannel.size(), Channels.newChannel(dataOut));
fChannel.close();
// qpyd as bytes
ByteBuffer dataRawBytes = ByteBuffer.wrap(dataOut.toByteArray());
dataRawBytes.order(ByteOrder.LITTLE_ENDIAN);
// read info of compressed data
int startZippedDictAddr = dataRawBytes.getInt(0x38);
int zippedDictLength = dataRawBytes.limit() - startZippedDictAddr;
// read zipped qqyd dictionary into byte array
dataOut.reset();
Channels.newChannel(new InflaterOutputStream(dataOut)).write(
ByteBuffer.wrap(dataRawBytes.array(), startZippedDictAddr, zippedDictLength));
// uncompressed qqyd dictionary as bytes
ByteBuffer dataUnzippedBytes = ByteBuffer.wrap(dataOut.toByteArray());
dataUnzippedBytes.order(ByteOrder.LITTLE_ENDIAN);
// for debugging: save unzipped data to *.unzipped file
Channels.newChannel(new FileOutputStream(inputPath + ".unzipped")).write(dataUnzippedBytes);
// stores the start address of actual dictionary data
int unzippedDictStartAddr = -1;
int idx = 0;
byte[] byteArray = dataUnzippedBytes.array();
while (unzippedDictStartAddr == -1 || idx < unzippedDictStartAddr)
{
// read word
int pinyinStartAddr = dataUnzippedBytes.getInt(idx + 0x6);
int pinyinLength = dataUnzippedBytes.get(idx + 0x0) & 0xff;
int wordStartAddr = pinyinStartAddr + pinyinLength;
int wordLength = dataUnzippedBytes.get(idx + 0x1) & 0xff;
if (unzippedDictStartAddr == -1)
{
unzippedDictStartAddr = pinyinStartAddr;
}
String word = new String(Arrays.copyOfRange(byteArray, wordStartAddr, wordStartAddr + wordLength),
"UTF-16LE");
wordList.add(word);
// step up
idx += 0xa;
}
return wordList;
}