2011-09-28 95 views
1

我有一個靜態流從Android 2.2手機上的藍牙接收原始二進制數據。進入的數據進入緩衝區1024的大小。我讀取()數據,然後把它寫入文件。我通過FTP將該文件發送到我的電腦。當ftp'ing一段時間插入一個額外的字符時,我注意到了一個令人不安的模式。所以我先將緩衝區打印到LogCat中,注意到這個字符不在那裏。這是我讀的寫代碼。FTP增加了額外的字符

FTPClient con = new FTPClient(); 
File file = new File(Environment.getExternalStorageDirectory() + "/ftp/new/" + "testdata.bin"); 

try { 
    con.connect("someIPAddress"); 
    if (con.login("anonymous", "[email protected]")) { 
     con.enterLocalPassiveMode(); // important! 

     FileInputStream in = new FileInputStream(file); 
     boolean result = con.storeFile("testdata.bin", in); 
     in.close(); 
     if (result) { 
      Log.v("upload result", "succeeded"); 
     } 
    } 
} catch (Exception e) {e.printStackTrace();} 

下面是從logcat的輸出的一個例子:

09 15 D0 0D 17 0A 06 08 07 

,這裏是什麼文件ftp'ing後:

09 15 D0 0D 17 0D 0A 06 08 07 

嗯,我認爲嗯0A是注入0D來製造(CRLF),但它不會在每個0A發生。我可以用C#編寫相同的程序,而這完全不會發生。那麼任何想法或幫助?

在進一步的調查中,我發現它發生時,數據進入是17 0A和文件顯示17 0D 0A。

回答

2

解決方案:FTPClient默認將文件發送爲ASCII。通過使用此命令將fileType設置爲二進制文件:

con.setFileType(FTP.BINARY_FILE_TYPE); 
0

Windows,unix和mac都有不同的行結尾。

FTP以ASCII模式爲您「修復」這個問題。

+0

不是一個真正的答案,而是一個聲明,你有解決方案的上述代碼? – JPM