2013-01-08 18 views
6

Mam aplikację w języku C/C++, która zapisuje dane we wspólnej pamięci w systemie Unix. Teraz chcę odczytać dane z pamięci współdzielonej za pomocą programu wykorzystującego Javę.Odczytywanie danych z pamięci współdzielonej przy użyciu języka Java napisanego przez C++

Program powinien odczytać dane z pamięci współdzielonej. Czy to możliwe?

Potrzebujesz małej implementacji, jeśli to możliwe.

+1

Czytanie pamięci współużytkowanej działa w JNI - w Javie nie można tego zrobić. Moje doświadczenia z JNI polegały na tym, że niektóre wtyczki JNI rozbił się inaczej solidna wirtualna maszyna wirtualna Java. Może więc inne rozwiązanie jest możliwe? – luukes

+0

Ta odpowiedź http://stackoverflow.com/a/1492536/1741542 mówi o plikach mapowanych w pamięci i NIO FileChannel. Może to też działa dla ciebie. –

+0

Jeśli chcesz skorzystać z trwałości danych (nawet w celu debugowania), możesz rozważyć użycie plików mapowanych w pamięci. Tutaj implementacja wykorzystująca czystą Javę https://github.com/peter-lawrey/Java-Chronicle –

Odpowiedz

5

Spójrz na this projektu codeproject (dla Windows):

Korzystanie Zmapowane plików i JNI do komunikowania się między Java i C++ programów

Albo this bibliotecznych:

CLIPC jest biblioteką Java o otwartym kodzie źródłowym, która umożliwia programistom komunikację między programami ności (IPC), które mogą być nieobecne lub trudne do użycia w dystrybucji Java.

+0

Czy mogę utworzyć metodę w C++ tylko do odczytu pamięci współużytkowanej, a następnie wywołać tę metodę za pomocą JNI? Czy byłoby to skuteczne i nie zaszkodzi również wydajności? – Nikhil

+0

Metody JNI powinny wywoływać z języka Java, a nie C++. Tak, możesz stworzyć metodę w C++ do odczytu/zapisu z/do pamięci współdzielonej. A także możesz zrobić to samo w Javie przy pomocy metod JNI. Nie przejmuj się wydajnością, jeśli robisz to dobrze. – deepmax

+0

Czy możesz po prostu powiedzieć mi, w jaki sposób mogę osiągnąć poniższą funkcjonalność? – Nikhil