socket 传输文件慢
我的工程部署在AIX系统的WebSphere(WAS)下,但socket传输很慢,我跟我同事两台笔记本之间传输还是可以的,但我们是局域网。以下是我的代码,希望高手能帮我看下!谢谢了!
------------发送文件方法---------------------------
public boolean sendFile(String fileName) {
try {
File file = new File(fileName);
if (!file.exists()) {
runLog("文件不存在!");
return false;
}
long fileSize = file.length();
String str = Constant.FILE_RECIEVE + ":" + file.getName() + ":"
+ Long.toString(fileSize) + ":" + transBufferSize ;
out.println(str);
str = in.readLine();
FileInputStream fileInputStream = new FileInputStream(file);
// 分块传输
boolean transFlag = true;
int off = 0;
while (transFlag) {
int bufSize = transBufferSize;
if (fileSize < transBufferSize) {
bufSize = Integer.parseInt(Long.toString(fileSize));
transFlag = false;
}
byte[] buf = new byte[bufSize];
fis.read(buf);
outStream.write(buf);
fileSize = fileSize - transBufferSize;
off += transBufferSize;
}
outStream.flush();
fileInputStream.close();
String result = "";
// 从服务端接收返回的消息
result = this.recieveMessage();
if (!Constant.SUCCESS.equals(result)) {
return false;
}
return true;
} catch (IOException e) {
return false;
}
}
-------------------------------------------------------
----------------------接收文件方法---------------------
private boolean recieveFile(String rootPath, String str) {
log.debug("-->SUNITS-->SocketServerService-->recieveFile-->");
// 分块接收,客户端传输过来的文件信息
String[] content = str.split(":");
boolean flag = true;
boolean returnResult =true;
String size = content[2].trim();
// 得到文件大小
long fileSize = Long.parseLong(size);
long tempSize = fileSize;
// 分段传输块大小,即发送的时候读取文件的大小,以字节为单位
transBufferSize = Integer.parseInt(content[3].trim());
FileOutputStream outputStream = null;
try {
File fileFolder = new File(rootPath);
if (!fileFolder.exists()) {
fileFolder.mkdirs();
}
File file = new File(rootPath + File.separator + content[1].trim());
outputStream = new FileOutputStream(file);
while (flag) {
int bufSize = transBufferSize;
if (fileSize < transBufferSize) {
bufSize = Integer.parseInt(Long.toString(fileSize));
flag = false;
}
byte[] buf = new byte[bufSize];
dis.readFully(buf);
outputStream.write(buf);
fileSize -= bufSize;
}
} catch (IOException e) {
e.printStackTrace();
returnResult = false;
} finally {
try {
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
log.error("--SUNITS-->SOcketTransServer-->recieveFile-->关闭流IOException异常-->"+e.toString());
returnResult = false;
}
}
return returnResult;
}
----------------------------------------------------