【发布时间】:2013-09-03 19:41:33
【问题描述】:
org.apache.commons.net.io.Util 使用 InputStream 在流终止之前无法解析live。这是对还是错?
IOUtil 类对我来说是一个黑匣子。它使用org.apache.commons.net.io.Util,但这同样不透明。
具体来说,IOUtil 的行 Util.copyStream(remoteInput, localOutput); 很有趣:
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 的作用以及它是如何做到的,但这真的是在兔子洞里。它在哪里结束?
【问题讨论】:
-
问题是如何并发打印和读取 TelnetClient 用于输出的 InputStream。
标签: java io inputstream telnet apache-commons