FTP добавил дополнительный символ - PullRequest
1 голос
/ 28 сентября 2011

У меня есть instream, который принимает необработанные двоичные данные с Bluetooth на телефоне 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'ing:

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

Ну, я думал, что хмм 0А что-то вводит 0D, чтобы сделать (CRLF), но это не происходит при каждом 0А. Я могу написать ту же программу на C #, и этого не происходит вообще. Так какие-нибудь идеи или помощь?

При дальнейшем исследовании я обнаружил, что это происходит, когда входные данные равны 17 0A, а файл показывает 17 0D 0A.

Ответы [ 2 ]

2 голосов
/ 30 сентября 2011

Решение: FTPClient отправит файл по умолчанию как ASCII. Установите для fileType значение Binary file с помощью этой команды:

con.setFileType(FTP.BINARY_FILE_TYPE);
0 голосов
/ 29 сентября 2011

Windows, Unix и Mac имеют разные окончания строки.

FTP "исправляет" это для вас в режиме ASCII.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...