--- /dev/null
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.cluster.io;
+
+import static java.util.Objects.requireNonNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.io.ByteSource;
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import net.jpountz.lz4.LZ4FrameOutputStream;
+import org.eclipse.jdt.annotation.NonNull;
+
+@Beta
+public abstract class InputOutputStreamFactory {
+ InputOutputStreamFactory() {
+ // Hidden on purpose
+ }
+
+ public static @NonNull InputOutputStreamFactory simple() {
+ return PlainInputOutputStreamSupport.INSTANCE;
+ }
+
+ public static @NonNull InputOutputStreamFactory lz4(final String blockSize) {
+ return lz4(LZ4FrameOutputStream.BLOCKSIZE.valueOf("SIZE_" + blockSize));
+ }
+
+ public static @NonNull InputOutputStreamFactory lz4(final LZ4FrameOutputStream.BLOCKSIZE blockSize) {
+ return new LZ4InputOutputStreamSupport(requireNonNull(blockSize));
+ }
+
+ public abstract @NonNull InputStream createInputStream(ByteSource input) throws IOException;
+
+ public abstract @NonNull InputStream createInputStream(File file) throws IOException;
+
+ public abstract @NonNull OutputStream createOutputStream(File file) throws IOException;
+
+ public abstract @NonNull OutputStream wrapOutputStream(OutputStream output) throws IOException;
+
+ static @NonNull BufferedInputStream defaultCreateInputStream(final File file) throws FileNotFoundException {
+ return new BufferedInputStream(new FileInputStream(file));
+ }
+
+ static @NonNull BufferedOutputStream defaultCreateOutputStream(final File file) throws FileNotFoundException {
+ return new BufferedOutputStream(new FileOutputStream(file));
+ }
+}