我编写了一个客户端 - 服务器文件传输程序。我正在努力实现以下工作流程:
连接到服务器 - >开放流 - >认证 - >消息('发送文件') - >消息([文件名]) - >消息([文件大小]) - >发送文件 - >消息('发送文件')...消息('断开')
目标是只连接和验证一次,并通过单个dataStream发送多个文件。
我修改了一个流复制方法,以确保复制不会从传入和传出流中复制太多数据。此复制方法在服务器和客户端上用于发送和接收。
示例从客户端向服务器发送文件:
服务器:copy(dataInputStream,fileOutPutStream,length)
客户端:copy(fileInputStream,dataOutputStream,length)
我的问题是你认为这种方法有任何潜在的问题吗?
static void copy(InputStream in, OutputStream out, long length) throws IOException {
byte[] buf;
if (length < 8192){
buf = new byte[(int) length];
}
buf = new byte[8192];
int len = 0;
long read = 0;
while (length > read && (len = in.read(buf)) > -1) {
read += len;
out.write(buf, 0, len);
if (length-read < 8192){
buf = new byte[(int) (length-read)];
}
}
}
答案 0 :(得分:-1)
while (length > read && (len = in.read(buf)) > -1) {
read += len;
out.write(buf, 0, len);
if (length-read < 8192){
buf = new byte[(int) (length-read)];
}
}
这样做的简单方法如下:
while (length > read && (len = in.read(buf, 0, Math.min(buf.length, length-read))) > 0) {
read += len;
out.write(buf, 0, len);
}
}
E&安培; OE
这样,缓冲区可以是你喜欢的任何大小都是零,而不是它的大小在几个点上蔓延到代码中。