我有一个插入Android 2.2手机蓝牙原始二进制数据的插件。进入的数据进入1024大小的缓冲区。我读取()数据,然后将其写入文件。我通过FTP将该文件发送到我的电脑。我注意到一个令人不安的模式,当ftp'ing每隔一段时间插入一个额外的字符。所以我先将缓冲区打印到LogCat,发现字符不存在。这是我的读写代码。
FTPClient con = new FTPClient();
File file = new File(Environment.getExternalStorageDirectory() + "/ftp/new/" + "testdata.bin");
try {
con.connect("someIPAddress");
if (con.login("anonymous", "anonymous@anon.com")) {
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
嗯,我认为hmm 0A正在注入0D来制作(CRLF),但每次0A都不会发生这种情况。我可以在C#中编写相同的程序,这根本不会发生。那么任何想法或帮助?
在进一步调查中,我发现当进入的数据是17 0A且文件显示17 0D 0A时会发生这种情况。
答案 0 :(得分:2)
解决方案:FTPClient默认将文件作为ASCII发送。使用以下命令将fileType设置为Binary文件:
con.setFileType(FTP.BINARY_FILE_TYPE);
答案 1 :(得分:0)
Windows,unix和mac都有不同的行结尾。
FTP以ASCII模式“修复”了这个。