有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在java中创建C风格的联合?

我必须将我的一段代码从C转换成java。代码如下所示

union commandString{
    char commndStr[20];
    struct{
        char commnd[4];
        char separator1;
        char agr1[5];
        char separator2;
        char arg2[3];
        char separator3;
        char additionalArg[5];
    };
};

我不想使用任何显式解析器,或者我不想使用

System.arraycopy

方法。 有没有我喜欢的方法


共 (3) 个答案

  1. # 1 楼答案

    Java语言不支持联合或直接控制内存布局,就像C语言直接支持的那样

    然而,Oracle确实提供了一个在Java5中添加的后门,可以使用sun类来使用它。杂项。不安全的这需要一些工作,马丁·汤普森在他的blog上记录了全部细节

    另一种选择是用C编写它,并通过JNI从Java作为本机函数访问它

  2. # 2 楼答案

    阅读有关Javolution工会的文章,我找到了ByteBuffer,它可以用作工会。作为一个只提供一个类的抽象类,您可能需要使用file创建一个临时文件。createTempFile(),一个RandomAccessFile(文件,“rw”),一个FileChannel RandomAccessFile。getChannel(),一个MappedByteBuffer文件通道。map()。它可以控制是否需要字节与其他类型的大端(默认)或小端关系。如果您只需要一个联合就可以将类型映射到字节,比如trie,这就足够了

  3. # 3 楼答案

    Struct and Union最好的图书馆是已经存在多年的Javolutions。这些设计就是为了做到这一点

    我建议,如果你打算使用这些不安全的工具,你可以把它放在一个图书馆里,然后把它抽象出来。这可以避免不断地遇到使JVM崩溃的bug(我的意思是C程序员可以理解的崩溃)

    我有一个名为javalang的库,它允许您做Java通常不允许做的事情,例如63位大小的堆外和内存映射、线程安全的堆外操作、在同一台机器上的JVM之间共享内存。正如我所说的,我使用我自己的图书馆来抽象使用不安全的信息