/* * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions.
*/
/** * Validate that an offset can be used with Deflater::setDictionary * * @param dictionary_offset offset value to be used * @throws Exception if an error occurs
*/
@Test(dataProvider = "validDictionaryOffsets") publicvoid testByteArray(int dictionary_offset) throws Exception { byte[] input = SRC_DATA.getBytes(UTF_8); byte[] output = newbyte[RESULT_SIZE];
Deflater deflater = new Deflater();
Inflater inflater = new Inflater(); try { // Compress the bytes
deflater.setDictionary(DICTIONARY.getBytes(UTF_8), dictionary_offset, DICTIONARY_LENGTH);
deflater.setInput(input);
deflater.finish(); int compressedDataLength = deflater.deflate(output, 0, output.length, Deflater.NO_FLUSH);
System.out.printf("Deflater::getTotalOut:%s, Deflater::getAdler: %s," + " compressed length: %s%n", deflater.getTotalOut(),
deflater.getTotalOut(), compressedDataLength);
deflater.finished();
// Decompress the bytes
inflater.setInput(output, 0, compressedDataLength); byte[] result = newbyte[RESULT_SIZE]; int resultLength = inflater.inflate(result); if (inflater.needsDictionary()) {
System.out.println("Specifying Dictionary");
inflater.setDictionary(DICTIONARY.getBytes(UTF_8), dictionary_offset, DICTIONARY_LENGTH);
resultLength = inflater.inflate(result);
} else {
System.out.println("Did not need to use a Dictionary");
}
inflater.finished();
System.out.printf("Inflater::getAdler:%s, length: %s%n",
inflater.getAdler(), resultLength);
/** * Validate that a ByteBuffer can be used with Deflater::setDictionary * * @throws Exception if an error occurs
*/
@Test publicvoid testHeapByteBuffer() throws Exception { byte[] input = SRC_DATA.getBytes(UTF_8); byte[] output = newbyte[RESULT_SIZE];
ByteBuffer dictDef = ByteBuffer.wrap(DICTIONARY.getBytes(UTF_8), DICTIONARY_OFFSET, DICTIONARY_LENGTH);
ByteBuffer dictInf = ByteBuffer.wrap(DICTIONARY.getBytes(UTF_8), DICTIONARY_OFFSET, DICTIONARY_LENGTH);
Deflater deflater = new Deflater();
Inflater inflater = new Inflater(); try { // Compress the bytes
deflater.setDictionary(dictDef);
deflater.setInput(input);
deflater.finish(); int compressedDataLength = deflater.deflate(output, 0, output.length, Deflater.NO_FLUSH);
System.out.printf("Deflater::getTotalOut:%s, Deflater::getAdler: %s," + " compressed length: %s%n", deflater.getTotalOut(),
deflater.getTotalOut(), compressedDataLength);
deflater.finished();
// Decompress the bytes
inflater.setInput(output, 0, compressedDataLength); byte[] result = newbyte[RESULT_SIZE]; int resultLength = inflater.inflate(result); if (inflater.needsDictionary()) {
System.out.println("Specifying Dictionary");
inflater.setDictionary(dictInf);
resultLength = inflater.inflate(result);
} else {
System.out.println("Did not need to use a Dictionary");
}
inflater.finished();
System.out.printf("Inflater::getAdler:%s, length: %s%n",
inflater.getAdler(), resultLength);
/** * Validate that ByteBuffer::allocateDirect can be used with Deflater::setDictionary * * @throws Exception if an error occurs
*/
@Test publicvoid testByteBufferDirect() throws Exception { byte[] input = SRC_DATA.getBytes(UTF_8); byte[] output = newbyte[RESULT_SIZE];
ByteBuffer dictDef = ByteBuffer.allocateDirect(DICTIONARY.length());
ByteBuffer dictInf = ByteBuffer.allocateDirect(DICTIONARY.length());
dictDef.put(DICTIONARY.getBytes(UTF_8));
dictInf.put(DICTIONARY.getBytes(UTF_8));
dictDef.position(DICTIONARY_OFFSET);
dictDef.limit(DICTIONARY_LENGTH);
dictInf.position(DICTIONARY_OFFSET);
dictInf.limit(DICTIONARY_LENGTH);
Deflater deflater = new Deflater();
Inflater inflater = new Inflater(); try { // Compress the bytes
deflater.setDictionary(dictDef.slice());
deflater.setInput(input);
deflater.finish(); int compressedDataLength = deflater.deflate(output, 0, output.length, Deflater.NO_FLUSH);
System.out.printf("Deflater::getTotalOut:%s, Deflater::getAdler: %s," + " compressed length: %s%n", deflater.getTotalOut(),
deflater.getTotalOut(), compressedDataLength);
deflater.finished();
// Decompress the bytes
inflater.setInput(output, 0, compressedDataLength); byte[] result = newbyte[RESULT_SIZE]; int resultLength = inflater.inflate(result); if (inflater.needsDictionary()) {
System.out.println("Specifying Dictionary");
inflater.setDictionary(dictInf.slice());
resultLength = inflater.inflate(result);
} else {
System.out.println("Did not need to use a Dictionary");
}
inflater.finished();
System.out.printf("Inflater::getAdler:%s, length: %s%n",
inflater.getAdler(), resultLength);
/** * Validate that an invalid offset used with setDictionary will * throw an Exception * * @param dictionary_offset offset value to be used
*/
@Test(dataProvider = "invalidDictionaryOffsets") publicvoid testInvalidOffsets(int dictionary_offset) { byte[] dictionary = DICTIONARY.getBytes(UTF_8);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.