В Java все примитивные типы подписаны (странно четный байт!).Поэтому вам нужно будет выписать целые числа со знаком, если вы хотите прочитать их в Java, используя DataInputStream.readInt()
.Также обратите внимание, что readInt () использует big-endian.Вы можете использовать что-то вроде EndianBinaryReader от Jon Skeets MiscUtils , чтобы написать их, чтобы их можно было прочитать на Android.
UTF-8 немного сложнее, так как DataInputStream
использует что-то под названием MUTF-8 (Модифицированный UTF-8) Кодировка для строк.В коде, который мы используем для обмена данными между android и .net, мы используем простые байты UTF-8 в кодировке длины строки для представления строки (-1 - ноль).Наш метод чтения в Java выглядит примерно так, чтобы читать стандартные строки в кодировке UTF-8 из C # BinaryWriter (после первой записи длины Int16):
public String readUTF8String() throws ImageFileFormatException, IOException
{
short len = readInt16();
if (len == -1)
return null;
if (len == 0)
return "";
if (len < -1)
throw new ImageFileFormatException("Invalid UTF8 string");
byte[] utf8Bytes = readBytes(len);
return new String(utf8Bytes, "UTF-8");
}