用小端写一个整数

时间:2012-06-13 16:27:51

标签: java io nio bytebuffer endianness

我必须写一个4bytes的文件来表示一个小端的整数(java使用big endian),因为外部c ++应用程序必须读取这个文件。我的代码不在te文件中写任何东西,但de buffer里面有数据。为什么? 我的功能:

public static void copy(String fileOutName, boolean append){
    File fileOut = new File (fileOutName);

    try {
         FileChannel wChannel = new FileOutputStream(fileOut, append).getChannel();

         int i = 5;
         ByteBuffer bb = ByteBuffer.allocate(4);
         bb.order(ByteOrder.LITTLE_ENDIAN);
         bb.putInt(i);

         bb.flip();

         int written = wChannel.write(bb);
         System.out.println(written);    

         wChannel.close();
     } catch (IOException e) {
     }
}

我的电话:

copy("prueba.bin", false);

1 个答案:

答案 0 :(得分:6)

当你不知道为什么会出现问题时,忽略空的try-catch块中的异常是个坏主意。

在无法创建文件的环境中运行程序的可能性非常大;但是,你为处理这种特殊情况而给出的指示是什么都不做。所以,很可能你有一个试图运行的程序,但由于某些原因而失败,这甚至没有向你显示原因。

试试这个

public static void copy(String fileOutName, boolean append){
    File fileOut = new File (fileOutName);

    try {
         FileChannel wChannel = new FileOutputStream(fileOut, append).getChannel();

         int i = 5;
         ByteBuffer bb = ByteBuffer.allocate(4);
         bb.order(ByteOrder.LITTLE_ENDIAN);
         bb.putInt(i);

         bb.flip();

         int written = wChannel.write(bb);
         System.out.println(written);    

         wChannel.close();
     } catch (IOException e) {
// this is the new line of code
         e.printStackTrace();
     }
}

我打赌你会发现为什么它不会马上起作用。