簡體   English   中英

通過Java套接字錯誤傳輸文件

[英]Wrong transfer of a file over Java socket

我正在嘗試將XML文件從台式機服務器傳輸到Android客戶端,但是在Android設備上卻只有整個文件的1024個字節。 我的代碼是:


將文件從桌面服務器發送到Android客戶端:

byte[] mybytearray = new byte[(int) filePianificazione.length()];

BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(filePianificazione));

bufferedInputStream.read(mybytearray, 0, mybytearray.length);

bufferedInputStream.close();

out.write(mybytearray, 0, mybytearray.length);

out.flush();

從Android客戶端到服務器的文件接收:

byte[] mybytearray = new byte[1024];

FileOutputStream fos = new FileOutputStream(file.getAbsolutePath());

BufferedOutputStream bos = new BufferedOutputStream(fos);

int bytesRead = in.read(mybytearray, 0, mybytearray.length);

bos.write(mybytearray, 0, bytesRead);

bos.close();

首先,您聲明byte[] mybytearray = new byte[1024];

然后,您正在做一個

int bytesRead = in.read(mybytearray, 0, mybytearray.length);

bos.write(mybytearray, 0, bytesRead);

在讀取的代碼(Android客戶端)中,您僅讀取1024字節,因為這是輸入緩沖區的長度,並且只讀取一次。 您需要有一個while循環,該循環將繼續從輸入流中讀取,然后將其寫出,直到達到EOF。

就像是:

while(in.available() > 0)
{
    int bytesRead = in.read(mybytearray, 0, mybytearray.length);
    bos.write(mybytearray, 0, bytesRead);
}

在Java中復制流的規范方法如下:

while ((count = in.read(buffer)) > 0)
{
  out.write(buffer, 0, count);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM