Инструменты для преобразования не-Java в [закрытый] источник Java

Из того, что я вижу в этом контексте, вам не нужно копировать SomeByteArray в буфер. Вам просто нужно получить дескриптор из SomeByteArray, закрепить его, скопировать данные IntPtr с помощью PtrToStructure, а затем отпустить. Нет необходимости в копировании.

Это будет:

NewStuff ByteArrayToNewStuff(byte[] bytes)
{
    GCHandle handle = GCHandle.Alloc(bytes, GCHandleType.Pinned);
    try
    {
        NewStuff stuff = (NewStuff)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(NewStuff));
    }
    finally
    {
        handle.Free();
    }
    return stuff;
}

Общая версия:

T ByteArrayToStructure<T>(byte[] bytes) where T: struct 
{
    GCHandle handle = GCHandle.Alloc(bytes, GCHandleType.Pinned);
    try
    {
        T stuff = (T)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(T));
    }
    finally
    {
        handle.Free();
    }
    return stuff;
}

Упрощенная версия (требуется переключатель unsafe):

unsafe T ByteArrayToStructure<T>(byte[] bytes) where T : struct
{
    fixed (byte* ptr = &bytes[0])
    {
        return (T)Marshal.PtrToStructure((IntPtr)ptr, typeof(T));
    }
}
6
задан Tom Hawtin - tackline 5 September 2008 в 19:55
поделиться

6 ответов

Одной вещью, которую можно попробовать, является находка компилятор байт-кода Java для языка, Вы говорите о (существуют компиляторы JVM для всех видов языков), и затем декомпилируйте байт-код назад в Java с помощью декомпилятора как Вруб.

Это чревато опасностью. Повторно созданный код высосет и вероятно будет нечитабелен.

5
ответ дан 8 December 2019 в 18:44
поделиться

Google: ANTLR

3
ответ дан 8 December 2019 в 18:44
поделиться

Если вы просто хотите использовать какой-то устаревший код C / Pascal, вы также можете использовать JNI для вызова его из Java.

Если вы хотите запустить его в апплете Java или аналогичной ограниченной среде, и он не должен быть очень эффективным, вы можете использовать NestedVM (который является преобразователем байт-кода MIPS в Java) вместе с кросс-компилятором gcc, который компилируется в MIPS). Но не ожидайте получить читабельный Java-код от этого.

0
ответ дан 8 December 2019 в 18:44
поделиться

Преобразование языка довольно простое, но вы обнаружите, что библиотеки разные. Вероятно, это будет большая часть вашей работы.

1
ответ дан 8 December 2019 в 18:44
поделиться

ADA к Java может быть, покончили нахождение и заменение!

-1
ответ дан 8 December 2019 в 18:44
поделиться

Any of those tools might help only if your non java code is not huge enough.

If its huge non java code and if you want to seriously translate it to java, then few things need to be thought of, its not just hundreds of lines of code, there is a design beneath it, there are few decisions taken by people beneath the code due to which certain problems might have been solved and few things have been working there. and investing time on any good translator won't be worth as it won't exist, it's not just syntax translation from one language to another.

If its not so huge code, its better to re write in java, as it has so many APIs packages out of box, it might not be big deal, hiring few interns for this also might help.

0
ответ дан 8 December 2019 в 18:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: