Я пытаюсь записать имя файла в Accumulo. Я использую аккумуло-ядро-1.43.
По какой-то причине некоторые файлы записываются в Accumulo с завершающими символами \x00 в конце имени. Загрузка осуществляется через сервлет Java (с использованием подключаемого модуля загрузки файлов jquery). В сервлете я проверяю имя файла с помощью System.out.println, и оно выглядит нормально, и я даже пытался отменить экранирование строки с помощью
org.apache.commons.lang.StringEscapeUtils.unescapeJava(...);
Фактическая запись в accumulo выглядит так:
Mutation mut = new Mutation(new Text(checkSum));
Value val = new Value(new Text(filename).getBytes());
long timestamp = System.currentTimeMillis();
mut.put(new Text(colFam), new Text(EMPTY_BYTES), timestamp, val);
но ничего необычного там не обнаружилось (возможно, \x00 не экранировано)? Но тогда, если я просканирую свою таблицу in accumulo, в имени файла будет один или несколько \x00.
Проблема, по-видимому, заключается в том, что я возвращаю эту строку в XML, когда я получаю список файлов (где он отображается) и передаю его обратно в браузер, XSL, который должен отображать информацию в XML, больше не работает, когда есть эти дополнительные символы (тоже не уверен, почему это так).
В хроме для ответа на эти вызовы я вижу, что после имени файла есть три красные точки, и когда я навожу курсор на него, появляется \u0 (что, я думаю, является другим представлением 0/null?).
Во всяком случае, я просто пытаюсь понять, почему это происходит, или, по крайней мере, как я могу отфильтровать символы \x00 перед возвратом файла в Java. Любые идеи?
read()
, и предполагаете, что она заполняет буфер. - person user207421   schedule 17.01.2014