簡體   English   中英

通過套接字發送圖像流問題-Android

[英]Sending Image Stream over Socket Issue - Android

我已經實現了一個應用程序,該應用程序使用SP相機拍攝照片並將其通過套接字發送到服務器。

我正在使用以下代碼來讀取本地存儲的圖像文件,並將其以連續的塊形式通過套接字發送:

FileInputStream fileInputStream = new FileInputStream( "my_image_file_path" );
ByteArrayOutputStream buffer = new ByteArrayOutputStream();

int nRead;
byte[] data = new byte[16384];

try {
    while( (nRead = fileInputStream.read(data, 0, data.length)) != -1 ){
        buffer.write(data, 0, nRead);
        networkOutputStream.write( buffer.toByteArray() );
        buffer.flush();
    }
} catch( IOException e ){
    e.printStackTrace();
}

我面臨的問題是, 更改字節data[]數組data[]的大小會影響實際發送到服務器的圖像數量

下面發布的圖像應該可以幫助您理解:

  • byte[] data = new byte[16384];

在此處輸入圖片說明

  • byte[] data = new byte[32768];

在此處輸入圖片說明

  • byte[] data = new byte[65536];

在此處輸入圖片說明

等等。

可以想象,我可以找到一個可以發送完整圖像的尺寸,但是這種特殊的解決方案是不可接受的,因為可能需要發送任何尺寸的圖像。

我認為以緩沖方式讀取圖像文件的方式似乎有問題,您能幫我嗎?

提前致謝!

ByteArrayOutputStream的使用是多余的,並且每次增長時都將發送其全部內容。 如下更改循環:

FileInputStream fileInputStream = new FileInputStream( "my_image_file_path" );

int nRead;
byte[] data = new byte[16384];

try {
    while( (nRead = fileInputStream.read(data)) != -1 ){
        networkOutputStream.write( data, 0, nRead );
    }

} catch( IOException e ){
    e.printStackTrace();
}
fileInputStream.close();

暫無
暫無

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

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