我想知道我是否能得到一些解决问题的指导......
你看,我正试图接受Socket编程; 我设法创建了一个客户端和服务器; 服务器写入客户端没问题; 我甚至设法使用发送文件
byte [] mybytearray = new byte [(int)myFile.length()];
FileInputStream fis = new FileInputStream(myFile);
Run Code Online (Sandbox Code Playgroud)
在服务器端.在客户端
byte [] mybytearray = new byte [filesize];
InputStream is = sock.getInputStream();
FileOutputStream fileos = new FileOutputStream("Filename.dat");
BufferedOutputStream bufferos = new BufferedOutputStream(fileos);
bytesRead = is.read(mybytearray,0,mybytearray.length);
current = bytesRead;
do {
bytesRead =
is.read(mybytearray, current, (mybytearray.length-current));
if(bytesRead >= 0) current += bytesRead;
} while(bytesRead > -1);
bufferos.write(mybytearray, 0 , current);
bufferos.flush();
long end = System.currentTimeMillis();
System.out.println(end-start);
bufferos.close();
Run Code Online (Sandbox Code Playgroud)
我的问题是我无法发送大文件; 我继续得到"线程中的异常"主"java.lang.OutOfMemoryError:Java堆空间"
有关如何管理从服务器向客户端发送大文件的任何想法或指示?我的意思是600 MB左右的大小....任何想法?非常感谢...谢谢
好吧,你的堆当前不得不尝试保持'mybytearray',这是你想要接收的文件的大小(大概).您需要将bos.write()操作移动到循环内,并使'mybytearray'成为固定大小.这是一个将一个流复制到另一个流的示例,它并不真正关心正在流式传输的数据的大小:
public static void stream(InputStream in, OutputStream out)
throws IOException {
byte[] buf = new byte[1024];
int bytesRead = 0;
try {
while (-1 != (bytesRead = in.read(buf, 0, buf.length))) {
out.write(buf, 0, bytesRead);
}
} catch (IOException e) {
log.error("Error with streaming op: " + e.getMessage());
throw (e);
} finally {
try{
in.close();
out.flush();
out.close();
} catch (Exception e){}//Ignore
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6892 次 |
| 最近记录: |