Я работаю над веб-приложением на основе GWT для отображения и обработки медицинских изображений. Проблема в том, что этот вид медицинского изображения не имеет стандартной пены и является огромным байтовым массивом (размер: более 18 м). Я должен непосредственно прочитать байтовый массив изображения и отправить его клиенту для отображения и дальнейшей обработки. Когда я передаю небольшую часть изображения (менее 32 КБ), клиент отображает пиксели нормально. Но когда я передаю изображение целиком, консоль выдает ошибку:
[введите код здесьERROR] javax.servlet.ServletContext log: исключение при отправке входящего вызова RPC
java.lang.OutOfMemoryError: Пространство кучи Java
at java.util.Arrays.copyOf (Неизвестный источник)
at java.util.Arrays.copyOf (Неизвестный источник)
at java.util.ArrayList.ensureCapacity (Неизвестный источник)
at java.util.ArrayList.add (Неизвестный источник)
на com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.append (ServerSerializationStreamWriter.java:583)
...
Это может быть ограничение размера передачи данных в GWT, так как я нашел другое решение, например:
кодировать массив байтов с помощью com.google.gwt.user.server.Base64Utils.toBase64 (byte []). Но этот метод не работает для IE 7. И IE8 имеет ограничение в 32 КБ. IE9 не имеет этого ограничения.
Клиентская сторона:
-ImageService.java
-ImageServiceAsync.java
-WebImage.java (интерфейс)
-ImageArray.java (сохранить данные изображения с сервера)
Сторона сервера:
-ImageServiceImpl.java
Я использовал кнопку, чтобы активировать доставку данных этого изображения. В фоновом режиме ImageServiceImpl считывает медицинское изображение из файла на диске и отправляет массив данных клиенту. Теперь, как ограничение, которое я упомянул выше, этот процесс не будет успешным, если я отправлю все данные изображения. Как я могу сделать, чтобы завершить этот процесс успешно? Интересно, есть ли способ непрерывной доставки множества мелких частей (<32 КБ) массива данных с сервера на клиент, когда я просто нажимаю кнопку один раз. Таким образом, я могу разделить изображение на множество маленьких частей, чтобы выполнить это. Или есть некоторые другие механизмы, полезные для этой задачи, о которых я не знаю. </p>