В Java я опрашиваю очередь сообщений WebSphere MQ, ожидая сообщения в формате `STRING, которое полностью состоит из XML. Часть этого XML будет содержать байты для вложения файла (любой формат: pdf, изображение и т. д.), который затем будет преобразован в большой двоичный объект для хранения в базе данных Oracle и последующего извлечения.
Проблема, с которой я сталкиваюсь, заключается в том, что известный размер отправляемых файлов примеров попадает в мою БД с другим размером. Я ничего не добавляю в байты (насколько я знаю), и размер кажется больше сразу после того, как я получаю сообщение. Я не могу определить, добавляю ли я каким-то образом информацию при извлечении, преобразовании из bytes
-> String
или это происходит во внешнем интерфейсе, когда отправитель заполняет сообщение.
Мой код при получении сообщения:
inboundmsg = new MQMessage();
inboundmsg = getMQMsg(FrontIncomingQueue, gmo);
strLen = inboundmsg.getMessageLength();
strData = new byte[strLen];
ibm_id = inboundmsg.messageId;
inboundmsg.readFully(strData);
inboundmsgContents = new String(strData);
Я вижу файл, который, как известно, имеет размер 21 КБ, а затем 28 КБ. Коллега предположил, что проблема может быть в кодировке/кодировке. Я не указываю кодировку ни в вызове конструктора String
выше, ни в любом из вызовов getBytes
при обратном преобразовании из строки (для других несвязанных целей). Моя кодировка по умолчанию — ISO-8859-1. При разговоре с поставщиком, который инициирует передачу сообщения, я спросил ее, какую кодировку она использует. Ее ответ:
«Я использую метод File.WriteAllBytes в C# — я передаю ему путь к моему файлу, и он записывает его в байт []. Я не смог найти в MSDN никакой документации о том, какую кодировку использует функция. Метод создает массив байтов, и из того, что я прочитал в Интернете сегодня утром, нет кодировки, это просто последовательность 8-битных двоичных данных без знака без кодировки».
Другой коллега предположил, что, возможно, виновата кодировка MQ, но мое прочтение документации показывает, что кодировка MQ влияет только на поведение readString
, readLine
и writeString
.
Если я полностью обхожу MQ и заполняю массив байтов, используя поток ввода файлов и локальный файл, размер файла сохраняется на всем пути к хранилищу Db, поэтому это определенно происходит во время или во время передачи сообщения.