У меня есть низкоуровневый механизм кэширования, который получает массив json с сервера и кэширует его в файл.
Фактический механизм кэширования просто сохраняет большие потоки в файл, не зная, что это json. Поэтому, когда я хотел бы добавить поток в существующий файловый кеш путем объединения потоков в другой файл, я получаю что-то вроде этого:
[{"id":3144,"created_at":"1322064201"}][{"id":3144,"created_at":"1322064201"}]
где очевидно, что я желаю что-то вроде этого:
[{"id":3144,"created_at":"1322064201"},{"id":3144,"created_at":"1322064201"}]
Какой самый эффективный / действенный способ сделать это?
Я посмотрел на FilterReader , но увидел, что я знаю, что все, что мне действительно нужно сделать, это удалить последний символ ]
из существующего кэша и первый символ нового контента [
и добавить ,
Я думал, что может быть лучший способ, чем проверять каждый символ в этих больших потоках.
Для контекста мой код делает что-то вроде этого:
... input stream passed with new content
File newCache = new File("JamesBluntHatersClub")
FileOutputStream tempFileOutputStream = new FileOutputStream(newCache);
FileInputStream fileInputStream = new FileInputStream(existingCache);
copyStream(fileInputStream, tempFileOutputStream);
copyStream(inputStream, tempFileOutputStream);
... clean up
ОБНОВЛЕНИЕ:
Реализовав FilterReader , который проверяет символы по одному за раз так:
@Override
public int read() throws IOException {
int content = super.read();
// replace open square brackets with comma
switch (content) {
case SQUARE_BRACKETS_OPEN:
return super.read();
case SQUARE_BRACKETS_CLOSE:
return super.read();
default:
return content;
}
}
время обработки неприемлемо медленно, поэтому я ищу другой вариант. Я думал об использовании размера файла для определения размера файла и удаления квадратной скобки таким образом