Mam obecnie Java ByteBuffer, który ma już dane w formacie Big Endian. Następnie chcę napisać do pliku binarnego jako Little Endian.Jak pisać big endian ByteBuffer do little endian w Javie
Oto kod, który po prostu zapisuje plik nadal w Big Endian:
public void writeBinFile(String fileName, boolean append) throws FileNotFoundException, IOException
{
FileOutputStream outStream = null;
try
{
outStream = new FileOutputStream(fileName, append);
FileChannel out = outStream.getChannel();
byteBuff.position(byteBuff.capacity());
byteBuff.flip();
byteBuff.order(ByteOrder.LITTLE_ENDIAN);
out.write(byteBuff);
}
finally
{
if (outStream != null)
{
outStream.close();
}
}
}
Zauważ, że byteBuff jest ByteBuffer który został wypełniony w formacie Big Endian.
Moja ostatnia metoda to brutalna metoda tworzenia kolejnego bufora i ustawiania ByteBuffer na little endian, a następnie odczytania wartości "getInt" z oryginalnego (dużego endianu) bufora i "setInt" wartości dla małego endianina bufor. Wyobrażam sobie, że jest lepszy sposób ...
Czy wypróbowałeś już Apache commons (http://commons.apache.org/io/api-release/org/apache/commons/io/EndianUtils.html)? –
+1 dla Apache Commons: nie wymyślanie koła :) – BachT