com.cybermkd.common.util.stream.StreamReader Maven / Gradle / Ivy
package com.cybermkd.common.util.stream;
import com.cybermkd.common.Constant;
import com.cybermkd.log.Logger;
import java.io.*;
/**
* Created by ice on 15-1-28.
*/
public class StreamReader {
private static final Logger logger = Logger.getLogger(StreamReader.class);
public static String readString(InputStream is) throws IOException {
return readString(is, Constant.encoding);
}
public static String readString(InputStream is, String encoding) throws IOException {
String result = null;
if (is != null) {
BufferedReader rd = new BufferedReader(new InputStreamReader(is, encoding));
StringBuilder response = new StringBuilder();
String line;
while ((line = rd.readLine()) != null) {
response.append(line);
}
result = response.toString();
logger.debug("Read stream from inputStream: %s", result);
rd.close();
}
return result;
}
public static File readFile(InputStream is, File writeFile) throws IOException {
return readFile(is, writeFile, null);
}
public static File readFile(InputStream is, int contentLength, File writeFile) throws IOException {
return readFile(is, contentLength, writeFile, null);
}
public static File readFile(InputStream is, File writeFile, FileRenamer renamer) throws IOException {
File file = null;
if (is != null) {
if (renamer != null) {
file = renamer.rename(writeFile);
} else {
file = Filer.mkDirs(writeFile);
}
//判断文件目录是否存在 如果不存在 创建
//获取一个写入文件流对象
OutputStream out = new FileOutputStream(file);
//创建一个4*1024大小的字节数组,作为循环读取字节流的临时存储空
byte buffer[] = new byte[4 * 1024];
int len = -1;
//循环读取下载的文件到buffer对象数组中
while ((len = is.read(buffer)) != -1) {
//把文件流写入到文件
out.write(buffer, 0, len);
}
out.close();
}
return file;
}
public static File readFile(InputStream is, int contentLength, File writeFile, FileRenamer renamer) throws IOException {
File file = null;
if (is != null) {
//判断文件是否存在
if (renamer == null && writeFile.exists()) {
if (contentLength == 0) {
logger.warn("File download was complete, don't download " + writeFile.getPath());
return writeFile;
}
long start = writeFile.length();
//必须要使用
RandomAccessFile out = new RandomAccessFile(writeFile, "rw");
out.seek(start);
byte[] buffer = new byte[1024];
int len = -1;
while ((len = is.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
out.close();
file = writeFile;
} else {
file = readFile(is, writeFile, renamer);
}
}
return file;
}
}