/**
* Copyright 2014, Emory University
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package edu.emory.clir.clearnlp.util;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
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.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.util.HashMap;
import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import org.tukaani.xz.LZMA2Options;
import org.tukaani.xz.XZInputStream;
import org.tukaani.xz.XZOutputStream;
import edu.emory.clir.clearnlp.util.constant.StringConst;
/**
* @since 3.0.0
* @author Jinho D. Choi ({@code jinho.choi@emory.edu})
*/
public class IOUtils
{
private IOUtils() {}
public static Map<String,byte[]> toByteMap(ZipInputStream stream) throws IOException
{
Map<String,byte[]> map = new HashMap<>();
ZipEntry zEntry;
while ((zEntry = stream.getNextEntry()) != null)
map.put(zEntry.getName(), toByteArray(stream));
stream.close();
return map;
}
public static byte[] toByteArray(ZipInputStream in) throws IOException
{
ByteArrayOutputStream bout = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int count;
while ((count = in.read(buffer)) != -1)
bout.write(buffer, 0, count);
return bout.toByteArray();
}
/** @param in internally wrapped by {@code new BufferedReader(new InputStreamReader(in))}. */
static public BufferedReader createBufferedReader(InputStream in)
{
return new BufferedReader(new InputStreamReader(in));
}
static public BufferedReader createBufferedReader(File file)
{
try
{
return new BufferedReader(new InputStreamReader(new FileInputStream(file)));
}
catch (FileNotFoundException e) {e.printStackTrace();}
return null;
}
static public BufferedReader createBufferedReader(String filename)
{
return createBufferedReader(createFileInputStream(filename));
}
/** @param in internally wrapped by {@code new PrintStream(new BufferedOutputStream(out))}. */
static public PrintStream createBufferedPrintStream(OutputStream out)
{
return new PrintStream(new BufferedOutputStream(out));
}
static public PrintStream createBufferedPrintStream(String filename)
{
return createBufferedPrintStream(createFileOutputStream(filename));
}
static public FileInputStream createFileInputStream(String filename)
{
FileInputStream in = null;
try
{
in = new FileInputStream(filename);
}
catch (FileNotFoundException e) {e.printStackTrace();}
return in;
}
static public FileInputStream[] createFileInputStreams(String[] filelist)
{
int i, len = filelist.length;
FileInputStream[] in = new FileInputStream[len];
for (i=0; i<len; i++)
in[i] = IOUtils.createFileInputStream(filelist[i]);
return in;
}
static public FileOutputStream createFileOutputStream(String filename)
{
FileOutputStream out = null;
try
{
out = new FileOutputStream(filename);
}
catch (FileNotFoundException e) {e.printStackTrace();}
return out;
}
static public XZOutputStream createXZBufferedOutputStream(String filename)
{
XZOutputStream zout = null;
try
{
zout = new XZOutputStream(new BufferedOutputStream(new FileOutputStream(filename)), new LZMA2Options());
}
catch (IOException e) {e.printStackTrace();}
return zout;
}
static public XZOutputStream createXZBufferedOutputStream(OutputStream out)
{
XZOutputStream zout = null;
try
{
zout = new XZOutputStream(new BufferedOutputStream(out), new LZMA2Options());
}
catch (IOException e) {e.printStackTrace();}
return zout;
}
static public XZInputStream createXZBufferedInputStream(InputStream in)
{
XZInputStream zin = null;
try
{
zin = new XZInputStream(new BufferedInputStream(in));
}
catch (IOException e) {e.printStackTrace();}
return zin;
}
static public XZInputStream createXZBufferedInputStream(String filename)
{
XZInputStream zin = null;
try
{
zin = new XZInputStream(new BufferedInputStream(new FileInputStream(filename)));
}
catch (IOException e) {e.printStackTrace();}
return zin;
}
static public ObjectInputStream createObjectXZBufferedInputStream(String filename)
{
ObjectInputStream oin = null;
try
{
oin = new ObjectInputStream(createXZBufferedInputStream(filename));
}
catch (IOException e) {e.printStackTrace();}
return oin;
}
static public ObjectInputStream createObjectXZBufferedInputStream(InputStream in)
{
ObjectInputStream oin = null;
try
{
oin = new ObjectInputStream(createXZBufferedInputStream(in));
}
catch (IOException e) {e.printStackTrace();}
return oin;
}
static public ObjectOutputStream createObjectXZBufferedOutputStream(String filename)
{
ObjectOutputStream out = null;
try
{
out = new ObjectOutputStream(createXZBufferedOutputStream(filename));
}
catch (IOException e) {e.printStackTrace();}
return out;
}
static public ObjectOutputStream createObjectXZBufferedOutputStream(OutputStream out)
{
ObjectOutputStream oout = null;
try
{
oout = new ObjectOutputStream(createXZBufferedOutputStream(out));
}
catch (IOException e) {e.printStackTrace();}
return oout;
}
/** @param in internally wrapped by {@code new ByteArrayInputStream(str.getBytes())}. */
static public ByteArrayInputStream createByteArrayInputStream(String s)
{
return new ByteArrayInputStream(s.getBytes());
}
public static InputStream getInputStreamsFromClasspath(String path)
{
return IOUtils.class.getResourceAsStream(StringConst.FW_SLASH+path);
}
}