Java 如何在android中使用socket发送大文件

Java 如何在android中使用socket发送大文件,java,android,sockets,Java,Android,Sockets,我编写了这段代码来将文件从服务器传输到客户端,但我只能发送小于1KB的文件。我想发送任意大小的文件。如果您可以修改我的代码,这将非常有帮助: 文件发送者(服务器代码) 先生,请帮帮我!提前谢谢 我可以发誓,你最初的问题是关于接收,而不是发送(其他答案似乎都是这样) 无论如何,要发送大文件,您可以将整个文件读入一个足够大的缓冲区(假设文件大小合理),或者使用一个循环以可管理大小的块读取它,然后处理(发送)这些块 在回答你原来的问题时,你只阅读了1024页,因为这是你试图阅读的全部内容。您已将缓冲区

我编写了这段代码来将文件从服务器传输到客户端,但我只能发送小于1KB的文件。我想发送任意大小的文件。如果您可以修改我的代码,这将非常有帮助:

文件发送者(服务器代码)


先生,请帮帮我!提前谢谢

我可以发誓,你最初的问题是关于接收,而不是发送(其他答案似乎都是这样)

无论如何,要发送大文件,您可以将整个文件读入一个足够大的缓冲区(假设文件大小合理),或者使用一个循环以可管理大小的块读取它,然后处理(发送)这些块

在回答你原来的问题时,你只阅读了1024页,因为这是你试图阅读的全部内容。您已将缓冲区分配为1024,并且只读取一次

            byte[] bytes = new byte[1024];
...
            int bytesRead = is.read(bytes, 0, bytes.length);
            bos.write(bytes, 0, bytesRead);
            bos.close();
试一试


并在出现异常时在适当的位置用try/catch块包装代码。

您需要将字节的接收放入一个循环中,该循环只有在接收到所有数据后才能完成。例如:-

byte[] bytes = new byte[1024];
InputStream is = socket.getInputStream();
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
while (true) {
    int bytesRead = is.read(bytes);
    if (bytesRead < 0) break;
    bos.write(bytes, 0, bytesRead);
    // Now it loops around to read some more.
}
bos.close();
byte[]bytes=新字节[1024];
InputStream=socket.getInputStream();
BufferedOutputStream bos=新的BufferedOutputStream(新文件输出流(文件));
while(true){
int bytesRead=is.read(字节);
如果(字节数<0)中断;
写入(字节,0,字节读取);
//现在它循环阅读更多内容。
}
bos.close();

如果尝试发送较大的文件,会发生什么情况?你有什么错误吗?数据传输的文件只有1kb大小,但我想传输大文件。如果有任何解决办法,请帮助我。谢谢你看到我的答案。您的客户端未读取所有可用数据。在服务器端添加此代码时,int bytesRead=os.read(字节);和bis.write(字节,0,字节读取);此行显示错误-无法解决方法。如何解决此错误,请帮助我先生谢谢-请确保在服务或线程中使用此方法,因为活动可能随时被终止。前台服务保持活动状态。如果您想在后台服务中处理此问题,请确保保存“状态”并在onec上恢复。服务返回。您是否尝试在IDE中单步执行代码?通过使用此代码,我将正确发送55mb大小的文件。但是,当我尝试传输500mb大小的文件时,它显示了一个错误-抛出OfMemoryError“未能分配360318346字节分配,5802592个空闲字节和87MB直到OOM”应用程序自动崩溃System.err:java.net.SocketException:Socket已关闭谢谢。这是因为您正在尝试将整个文件加载到服务器端的字节数组中。您需要以与我的答案类似的方式循环,一次读取少量代码并将其写入套接字;和bis.write(字节,0,字节读取);此行显示错误-无法解析方法。谢谢
            byte[] bytes = new byte[1024];
...
            int bytesRead = is.read(bytes, 0, bytes.length);
            bos.write(bytes, 0, bytesRead);
            bos.close();
byte[] bytes = new bytes[1024];
...
int bytesRead = is.read(bytes, 0, bytes.length);
while(bytesRead > 0) {
    bos.write(bytes, 0, bytesRead);
    bytesRead = is.read(bytes, 0, bytes.length);
}
...
byte[] bytes = new byte[1024];
InputStream is = socket.getInputStream();
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
while (true) {
    int bytesRead = is.read(bytes);
    if (bytesRead < 0) break;
    bos.write(bytes, 0, bytesRead);
    // Now it loops around to read some more.
}
bos.close();