2011-09-28 109 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