В Android я пытаюсь передать XML-файл между двумя устройствами, открыв сокетное соединение между ними. Я могу успешно найти устройства, подключиться и открыть сокет.
Проблема в том, что при чтении XML-файла, отправляемого первым устройством, в нем обнаруживается много ненужных символов. Например, следующий XML-файл, отправленный устройством:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
принимается другим устройством следующим образом:
¬íwµ<?xml version="1.0" encoding="ISO-8859-1" ?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
Символы барахла, видимые в этом XML-файле, вставляются в несколько точек для большего XML-файла. Вот код для чтения XML-файла на клиенте:
InputStream tmpIn = null;
FileOutputStream fos = null;
BufferedOutputStream bos = null;
byte[] buffer = null;
int current = 0;
try {
tmpIn = socket.getInputStream();
// create a new file
File newTempFile = new File("/mnt/sdcard/test.xml");
if(!newTempFile.exists()) {
newTempFile.createNewFile();
}
else {
newTempFile.delete();
newTempFile.createNewFile();
}
fos = new FileOutputStream(newTempFile);
try {
byte[] buffer1 = new byte[2048];
int length;
while ((length = tmpIn.read(buffer1))>0){
fos.write(buffer1, 0, length);
}
fos.flush();
fos.close();
tmpIn.close();
}
catch (IOException e) {
Log.d("Sync", "IOException: "+ e);
}
}
catch (Exception e) {
Log.d("Sync", "Exception: "+ e);
}
А вот код для записи файла XML:
File file = new File ("/mnt/sdcard/sample.xml");
byte[] fileBytes = new byte[(int) file.length()];
try {
BluetoothSocket socket = device.createRfcommSocketToServiceRecord(MY_UUID);
socket.connect();
ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
FileInputStream fis = new FileInputStream(file);
fis.read(fileBytes);
// Send the file
out.write(fileBytes);
out.flush();
out.close();
}
catch (Exception e) {
Log.d("Sync", "Exception in writing file: "+ e);
}
Я твердо верю, что произошла ошибка при чтении потока ввода сокета в клинете и создании из него XML-файла. Не уверен, что это? Я пишу какие-либо управляющие символы в файл XML. Мое убеждение также подтверждается тем фактом, что подобные ненужные символы находятся в большем XML-файле в нескольких местах (возможно, один набор для записи одного буфера?)