Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Http 在J2ME中使用多个hppt连接上载大文件_Http_Java Me_Upload - Fatal编程技术网

Http 在J2ME中使用多个hppt连接上载大文件

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

我想从诺基亚手机上传一个大文件到服务器,我使用下面的代码。这段代码适用于小文件。当我想上传一个更大的文件(大约10mb)时,我会收到一条内存不足的消息。有人知道我如何使用转换此代码来上载文件吗 多个httpConnections,每个连接发送一个文件块。让我们假设服务器支持这一点

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循环中不工作。我将尝试使用分析器。我一直在寻找这样的解决方案:(见最后一条评论)