Brotli4j provides Brotli compression and decompression for Java.
Module | Architecture | Tested On |
---|---|---|
Windows (Windows Server 2022) | x64 | JDK 1.8, JDK 11, JDK 17 |
Linux (CentOS 6) | x64 | JDK 1.8, JDK 11, JDK 17 |
Linux (Ubuntu 18.04) | Aarch64 | JDK 1.8, JDK 11, JDK 17 |
Linux (Ubuntu 18.04) | ARMv7 | JDK 1.8, JDK 11 |
macOS (Catalina) | x64 | JDK 1.8, JDK 11, JDK 17 |
macOS (Catalina) | Aarch64 | JDK 1.8, JDK 11, JDK 17 |
*Install Microsoft Visual C++ Redistributable before running this library on Windows
For maven, the natives will import automatically by your system family and architecture.
<dependency>
<groupId>com.aayushatharva.brotli4j</groupId>
<artifactId>brotli4j</artifactId>
<version>1.9.0</version>
</dependency>
For gradle, we have to write some logic to import native automatically. Of course, you can add native(s) as dependency manually also.
import org.gradle.nativeplatform.platform.internal.Architectures
import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform
val brotliVersion = "1.9.0"
val operatingSystem: OperatingSystem = DefaultNativePlatform.getCurrentOperatingSystem()
repositories {
mavenCentral()
}
dependencies {
implementation("com.aayushatharva.brotli4j:brotli4j:$brotliVersion")
runtimeOnly(
"com.aayushatharva.brotli4j:native-${
if (operatingSystem.isWindows) "windows-x86_64"
else if (operatingSystem.isMacOsX)
if (DefaultNativePlatform.getCurrentArchitecture().isArm()) "osx-aarch64"
else "osx-x86_64"
else if (operatingSystem.isLinux)
if (Architectures.ARM_V7.isAlias(DefaultNativePlatform.getCurrentArchitecture().name)) "linux-armv7"
else if (Architectures.AARCH64.isAlias(DefaultNativePlatform.getCurrentArchitecture().name)) "linux-aarch64"
else if (Architectures.X86_64.isAlias(DefaultNativePlatform.getCurrentArchitecture().name)) "linux-x86_64"
else
throw IllegalStateException("Unsupported architecture: ${DefaultNativePlatform.getCurrentArchitecture().name}")
else
throw IllegalStateException("Unsupported operating system: $operatingSystem")
}:$brotliVersion"
)
}
import org.gradle.nativeplatform.platform.internal.Architectures
import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform
def brotliVersion = "1.9.0"
def operatingSystem = DefaultNativePlatform.getCurrentOperatingSystem()
repositories {
mavenCentral()
}
dependencies {
implementation "com.aayushatharva.brotli4j:brotli4j:$brotliVersion"
runtimeOnly("""com.aayushatharva.brotli4j:native-${
if (operatingSystem.isWindows()) "windows-x86_64"
else if (operatingSystem.isMacOsX())
if (DefaultNativePlatform.getCurrentArchitecture().isArm()) "osx-aarch64"
else "osx-x86_64"
else if (operatingSystem.isLinux())
if (Architectures.ARM_V7.isAlias(DefaultNativePlatform.getCurrentArchitecture().getName())) "linux-armv7"
else if (Architectures.AARCH64.isAlias(DefaultNativePlatform.getCurrentArchitecture().getName())) "linux-aarch64"
else if (Architectures.X86_64.isAlias(DefaultNativePlatform.getCurrentArchitecture().getName())) "linux-x86_64"
else
throw new IllegalStateException("Unsupported architecture: ${DefaultNativePlatform.getCurrentArchitecture().getName()}");
else
throw new IllegalStateException("Unsupported operating system: $operatingSystem");
}:$brotliVersion""")
}
Call Brotli4jLoader.ensureAvailability()
in your application once before using Brotli4j.
public class Example {
public static void main(String[] args) {
// Load the native library
Brotli4jLoader.ensureAvailability();
// Compress data and get output in byte array
byte[] compressed = Encoder.compress("Meow".getBytes());
// Decompress data and get output in DirectDecompress
DirectDecompress directDecompress = Decoder.decompress(compressed); // or DirectDecompress.decompress(compressed);
if (directDecompress.getResultStatus() == DecoderJNI.Status.DONE) {
System.out.println("Decompression Successful: " + new String(directDecompress.getDecompressedData()));
} else {
System.out.println("Some Error Occurred While Decompressing");
}
}
}
public class Example {
public static void main(String[] args) {
// Load the native library
Brotli4jLoader.ensureAvailability();
FileInputStream inFile = new FileInputStream(filePath);
FileOutputStream outFile = new FileOutputStream(filePath + ".br");
Encoder.Parameters params = new Encoder.Parameters().setQuality(4);
BrotliOutputStream brotliOutputStream = new BrotliOutputStream(outFile, params);
int read = inFile.read();
while (read > -1) {
brotliOutputStream.write(read);
read = inFile.read();
}
// Close the BrotliOutputStream. This also closes the FileOutputStream.
brotliOutputStream.close();
inFile.close();
}
}
public class Example {
public static void main(String[] args) {
// Load the native library
Brotli4jLoader.ensureAvailability();
FileInputStream inFile = new FileInputStream(filePath);
FileOutputStream outFile = new FileOutputStream(decodedfilePath);
BrotliInputStream brotliInputStream = new BrotliInputStream(inFile);
int read = brotliInputStream.read();
while (read > -1) {
outFile.write(read);
read = brotliInputStream.read();
}
// Close the BrotliInputStream. This also closes the FileInputStream.
brotliInputStream.close();
outFile.close();
}
}
JProfiler is supporting Brotli4J with its full-featured Java Profiler. JProfiler's intuitive UI helps you resolve performance bottlenecks, pin down memory leaks and understand threading issues. Click below to know more: