1、使用Guava的ByteStreams.copy()方法
ByteStreams.copy(inputStream, outputStream);
2、使用read和write实现
private void copyInputStreamToFile( InputStream in, File file ) {
try {
OutputStream out = new FileOutputStream(file);
byte[] buf = new byte[1024];
int len;
while((len=in.read(buf))>0){
out.write(buf,0,len);
}
out.close();
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
或者
// buffer size used for reading and writing
private static final int BUFFER_SIZE = 8192;
/**
* Reads all bytes from an input stream and writes them to an output stream.
*/
private static long copy(InputStream source, OutputStream sink) throws IOException {
long nread = 0L;
byte[] buf = new byte[BUFFER_SIZE];
int n;
while ((n = source.read(buf)) > 0) {
sink.write(buf, 0, n);
nread += n;
}
return nread;
}
或者
try(InputStream inputStream = new FileInputStream("C:\\mov.mp4");
OutputStream outputStream = new FileOutputStream("D:\\mov.mp4")) {
byte[] buffer = new byte[10*1024];
for (int length; (length = inputStream.read(buffer)) != -1; ) {
outputStream.write(buffer, 0, length);
}
} catch (FileNotFoundException exception) {
exception.printStackTrace();
} catch (IOException ioException) {
ioException.printStackTrace();
}
或者
byte[] buffer = new byte[2048];
for (int n = in.read(buffer); n >= 0; n = in.read(buffer))
out.write(buffer, 0, n);
3、使用Spring framework的StreamUtils.copy(in, out)方法
文档:
StreamUtils.copy(inputStream, outputStream);
或者
FileCopyUtils.copy(inputStream, outputStream);
4、使用Commons Net的 Util类
import org.apache.commons.net.io.Util;
Util.copyStream(inputStream, outputStream);
相关文档:
Java 复制克隆(clone)Inputstream的方法及示例代码
Java Inputstream流转换读取成byte[]字节数组方法及示例代码
Java Inputstream流转换读取成String字符串方法及示例代码
Java 使用Stream I/O(Inputstream/OutputStream)读写文件的方法及示例代码