2010-11-23 6 views

ответ

10

Он использует поддержку ОС для файлов с отображением памяти.

Я пытаюсь найти документацию, чтобы поддержать это, но я еще не нашел ничего убедительного. Тем не менее, различные биты документации делать говорят такие вещи, как это:

Многие из деталей, отображенные в памяти файлы являются по своей сути зависит от используемой операционной системы и, следовательно, не определено. Поведение этого метода, когда запрашиваемая область не полностью содержится в файле этого канала, не указана. Независимо от того, будут ли изменения, внесенные в содержимое или размер базового файла, этой программой или другим, распространяются в буфер, не указывается. Скорость, с которой изменения в буфере распространяются в файл, не указана.

Если все было просто эмулировано, не было бы необходимости в таком неуказанном поведении.

+0

Спасибо @ Jon за ответ! Как я понял вас: классы java.nio (для манипулирования файлами с отображением памяти) обертывают Windows API. Я прав?))) – Edward83 2010-11-23 22:41:45

+1

Я попытался сделать какой-то тест. Я хотел создать один MMF и поделиться им между двумя процессами: Win32 C++ и Java с nio. Но тест не удался, потому что, поскольку я нашел, я не могу создать/открыть «Именованный» MMF в Java. lol))) – Edward83 2010-11-23 23:24:40

9

Чтение между строками вашего вопроса и комментария, то, что вы пытаетесь сделать, это использовать файл с отображением памяти для обмена памятью/объектами между Java и C++-приложением.

Мой совет: не пытайтесь это делать.

Есть сложные вопросы, которые необходимо будет решить, чтобы сделать это надежно:

  • синхронизации использования двух приложений в общей структуре данных,
  • обеспечения того, чтобы изменения, сделанные одним приложением получить надежно написано в основной памяти и считывается другим,
  • , гарантируя, что изменения будут сброшены на диск в ожидаемом порядке.

Специфическая проблема Java заключается в том, что вы не можете поместить свои объекты Java в область с отображением памяти. Вместо этого вам придется сериализовать и десериализовать их каким-то образом, что совместимо с представлениями, которые ожидает сторона C++.

Наконец, даже если вы преуспела в решении всех этих вопросов, ваше решение может быть хрупким, потому что это зависит от неопределенного поведения ОС, C++ и реализаций Java , которые потенциально могут изменить если изменить версии любой из вышеперечисленных.