org.apache.commons.net.io.Util
ストリームが終了するまでライブInputStream
で解析できない用途。それは正しいですか、それとも間違っていますか?
IOUtilクラスは私にとってブラックボックスです。使用しますorg.apache.commons.net.io.Util
が、これも同様に不透明です。
具体的には、次の行Util.copyStream(remoteInput, localOutput);
がIOUtil
興味深いです。
copyStream public static final long copyStream(InputStream source, OutputStream dest) throws CopyStreamException Same as copyStream(source, dest, DEFAULT_COPY_BUFFER_SIZE); Throws: CopyStreamException
入ってくる元のストリームまたはそのコピーを読み取るにはどうすればよいですか? ライブ telnet 接続には、InputStream
終了しない があります。API にそのような機能はありません。
あるいは、Apache を再実装examples.util.IOUtil
すると、元の問題に戻ります。
package weathertelnet;
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Logger;
public class StreamReader {
private final static Logger LOG = Logger.getLogger(StreamReader.class.getName());
private StringBuilder stringBuilder = new StringBuilder();
private InputStream inputStream;
public StreamReader() {
}
public void setInputStream(InputStream inputStream) throws IOException {
this.inputStream = inputStream;
readWrite();
}
public void readWrite() throws IOException {
Thread reader = new Thread() {
@Override
public void run() {
do {
try {
char ch = (char) inputStream.read();
stringBuilder.append(ch);
} catch (IOException ex) {
}
} while (true); //never stop reading the stream..
}
};
Thread writer = new Thread() {
@Override
public void run() {
//Util.copyStream(remoteInput, localOutput);
//somehow write the *live* stream to file *as* it comes in
//or, use org.apache.commons.net.io.Util to "get the data"
}
};
}
}
根本的な誤解があるか、再実装せずに (またはおそらくリフレクションを使用して)、これらの API はライブ InputStream
の未終了の処理を許可しません。
ここでリフレクションを使用するつもりはありません。次の段階では、何org.apache.commons.net.io.Util
がどのように機能するかを分解し始めることになると思いますが、それは本当にうさぎの穴に落ちています。どこで終わりますか?