Http 在J2ME中使用多个hppt连接上载大文件
我想从诺基亚手机上传一个大文件到服务器,我使用下面的代码。这段代码适用于小文件。当我想上传一个更大的文件(大约10mb)时,我会收到一条内存不足的消息。有人知道我如何使用转换此代码来上载文件吗 多个httpConnections,每个连接发送一个文件块。让我们假设服务器支持这一点Http 在J2ME中使用多个hppt连接上载大文件,http,java-me,upload,Http,Java Me,Upload,我想从诺基亚手机上传一个大文件到服务器,我使用下面的代码。这段代码适用于小文件。当我想上传一个更大的文件(大约10mb)时,我会收到一条内存不足的消息。有人知道我如何使用转换此代码来上载文件吗 多个httpConnections,每个连接发送一个文件块。让我们假设服务器支持这一点 fc = (FileConnection)Connector.open("file:///myfile", Connector.READ); is = fc.openInputStream(); // opening
fc = (FileConnection)Connector.open("file:///myfile", Connector.READ);
is = fc.openInputStream();
// opening http connection and outputstream
HttpConnection http = (HttpConnection)Connector.open(url, Connector.WRITE);
http.setRequestMethod(HttpConnection.POST);
http.setRequestProperty("Content-Type", type);
http.setRequestProperty("Connection", "close");
OutputStream os = http.openOutputStream();
int total = 0;
while (total < fileSize) {
byte b[] = new byte[1024];
int length = is.read(b, 0, 1024);
os.write(b, 0, length);
total += length;
}
os.flush();
int rc = http.getResponseCode();
os.close();
http.close();
fc=(文件连接)连接器。打开(“file:///myfile“,连接器。读取);
is=fc.openInputStream();
//打开http连接和outputstream
HttpConnection http=(HttpConnection)Connector.open(url,Connector.WRITE);
setRequestMethod(HttpConnection.POST);
setRequestProperty(“内容类型”,类型);
setRequestProperty(“连接”、“关闭”);
OutputStream os=http.openOutputStream();
int-total=0;
而(总数<文件大小){
字节b[]=新字节[1024];
int length=is.read(b,0,1024);
os.write(b,0,长度);
总长度+=长度;
}
os.flush();
int rc=http.getResponseCode();
os.close();
http.close();
尝试在while
循环中移动os.flush()
调用,以便每次刷新缓冲区。目前,您的整个文件在通过网络发送之前都会被读入内存
如果这不能解决问题,我建议您使用a在模拟器中运行代码,以便更好地了解内存的使用位置。尝试移动缓冲区初始化
字节b[]=新字节[1024]代码>在while循环之前-您不需要每次都重新创建它。并尝试将System.gc()
放入循环中-这可能有帮助(也可能没有)
另外,当您调用fc时,一些设备可能会尝试将整个文件放入内存。openInputStream
os.flush在while循环中不工作。我将尝试使用分析器。我一直在寻找这样的解决方案:(见最后一条评论)