我有一个 instream,它从 Android 2.2 手机上的蓝牙接收原始二进制数据。传入的数据进入大小为 1024 的缓冲区。我读取()数据,然后将其写入文件。我通过 FTP 将该文件发送到我的计算机。当 ftp 时,我注意到一个令人不安的模式,每隔一段时间就会插入一个额外的字符。所以我首先将缓冲区打印到 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 后文件中的内容:
09 15 D0 0D 17 0D 0A 06 08 07
好吧,我认为嗯 0A 某些东西正在注入(inject) 0D 来制作 (CRLF),但它不会在每个 0A 时都发生。我可以用 C# 编写相同的程序,但这根本不会发生。那么有什么想法或帮助吗?
在进一步调查中,我发现当输入的数据为 17 0A 并且文件显示为 17 0D 0A 时会发生这种情况。
最佳答案
解决方案:默认情况下,FTPClient 将以 ASCII 格式发送文件。使用此命令将文件类型设置为二进制文件:
con.setFileType(FTP.BINARY_FILE_TYPE);
关于android - FTP 添加了额外的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7588625/