Можно ли избежать временных файлов, когда метод Java ожидает аргументы Reader / Writer? - PullRequest
0 голосов
/ 16 сентября 2009

Я вызываю метод из внешней библиотеки с (упрощенной) подписью, например так:

public class Alien
{
    // ...
    public void munge(Reader in, Writer out) { ... }
}

Метод в основном читает строку из одного потока и записывает свои результаты в другой. У меня есть несколько строк, которые мне нужно обработать этим методом, но ни одна из них не существует в файловой системе. Струны могут быть довольно длинными (около 300 КБ каждая). В идеале я хотел бы вызвать munge () в качестве фильтра:

public void myMethod (ArrayList<String> strings)
{
    for (String s : strings) {
        String result = alienObj.mungeString(s);
        // do something with result
    }
}

К сожалению, класс Alien не предоставляет метод mungeString () и не предназначен для наследования. Есть ли способ избежать создания двух временных файлов каждый раз, когда мне нужно обработать список строк? Например, передать мой ввод в поток Reader и прочитать его обратно из потока Writer, не затрагивая файловую систему?

Я новичок в Java, пожалуйста, прости меня, если ответ очевиден для профессионалов.

Ответы [ 3 ]

3 голосов
/ 16 сентября 2009
3 голосов
/ 16 сентября 2009

Вы можете легко избежать временных файлов, используя любой / все из них:

Пример mungeString() метод может выглядеть следующим образом:

public String mungeString(String input) {
  StringWriter writer = new StringWriter();
  alienObj.munge(new StringReader(input), writer));
  return writer.toString();
}
0 голосов
/ 04 ноября 2012

Если вам хорошо работать с двоичными массивами в памяти, как в C #, то я думаю, что PipedWriter & PipedReader - самый удобный способ сделать это. Проверьте это:

Можно ли избежать временных файлов, когда метод Java ожидает аргументы Reader / Writer?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...