小编use*_*243的帖子

如何在Java中将大端字节ByteBuffer写入小端

我目前有一个Java ByteBuffer,它已经拥有Big Endian格式的数据.然后我想写一个二进制文件作为Little Endian.

这是在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();
         }
     }

 }
Run Code Online (Sandbox Code Playgroud)

请注意,byteBuff是一个以Big Endian格式填充的ByteBuffer.

我的最后一种方法是创建另一个缓冲区并将ByteBuffer设置为little endian然后从原始(big endian)缓冲区读取"getInt"值,并将值"setInt"设置为little endian缓冲区的强力方法.我想有更好的方法......

java bytebuffer endianness

7
推荐指数
1
解决办法
2万
查看次数

使用JNI在C中访问Java对象中的Java对象

我对JNI比较陌生,并且已经解决了使用JNI在Java对象中弄乱整数和数组的基础知识.现在我正在尝试修改/访问Java对象中的Java对象.

我一直在互联网和Stack Overflow上搜索,还没有找到如何做到这一点.

这是一个例子.

在Java中:

public class ObjectOne
{
    private byte[] buff;
    ...
    ...
}

public class ObjectTwo
{
    private ObjectOne obj;
    ...
    ...
}
Run Code Online (Sandbox Code Playgroud)

在JNI中,如何通过ObjectTwo从ObjectOne访问"buff"?我试过这样的事......

JNIEXPORT void JNICALL Java_accessBuffThroughObjectTwo(JNIEnv *env, jobject obj, jobject objectTwo)
{
    jclass clazz;
    jclass bufferClazz;
    jobject bufferJObject;

    clazz = (*env)->GetObjectClass(env, objectTwo);
    fid = (*env)->GetFieldID(env, clazz, "obj", "Ljava/lang/Object;");
    bufferJObject = (*env)->GetObjectField(env, javascsicommand, fid);
    bufferClazz = (*env)->GetObjectClass(env, bufferJObject);  <-- Fails here for Access Violation
    fid = (*env)->GetFieldID(env, bufferClazz, "buff", "[B");
}
Run Code Online (Sandbox Code Playgroud)

对我做错的任何帮助?

c c++ java java-native-interface

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

java ×2

bytebuffer ×1

c ×1

c++ ×1

endianness ×1

java-native-interface ×1