Android: дополнительные байты в файле передаются на устройство - PullRequest
1 голос
/ 21 марта 2012

Итак, у меня есть простое приложение для Android, которое подключается к приложению Java Server с помощью сокетов.В частности, я хочу иметь возможность отправить файл из приложения «Сервер» в приложение Android, а затем сохранить этот файл во внутренней памяти на устройстве.Основой кода сервера для передачи файла является:

BufferedInputStream  bis = new BufferedInputStream(new FileInputStream(new File(System.getProperty("user.home"), "text.txt")));
BufferedOutputStream bos = new BufferedOutputStream(clientSocket.getOutputStream());
byte buffer[] = new byte[1024];
int read;
while ((read = bis.read(buffer)) != -1) {
    bos.write(buffer, 0, read);
}
bos.flush();
bos.close();

, а код клиента для получения файла выглядит следующим образом:

BufferedInputStream bis = new BufferedInputStream(clientSocket.getInputStream());
BufferedOutputStream bos = new BufferedOutputStream(openFileOutput("text.txt", Context.MODE_PRIVATE));
byte buffer[] = new byte[1024];
int read;
while ((read = bis.read(buffer)) != -1) {
    bos.write(buffer, 0, read);
}
bos.flush();
bos.close();

Код работает нормально, когдакод клиента находится в стандартном приложении Java, то есть файл успешно отправляется с сервера на клиент.Проблема возникает, когда я использую этот код в приложении для Android.(Примечание: я использую стандартный FileOutputStream в стандартном приложении Java вместо строки

    openFileOutput("text.txt", Context.MODE_PRIVATE))

выше).

Например, файл, который я передаю, представляет собой простой UTF-8текстовый файл, который содержит единственную строку

    This is a text file. 

Однако, когда я извлекаю этот файл, я скопировал его в эмулятор из папки "/ data / data // files" на эмуляторе.дополнительные пару байтов в верхней части файла, поэтому содержимое теперь

    ¨ÌThis is a text file.

Я понятия не имею, почему это происходит, и это поставило меня в тупик.Я думаю, что проблема может быть связана со строкой:

    BufferedOutputStream bos = new BufferedOutputStream(openFileOutput("text.txt", Context.MODE_PRIVATE));

, но я не могу понять это.

Любые предложения относительно того, что я делаю неправильно, были бы наиболее полезными.

Заранее спасибо

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