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 中看不到这样的功能。
或者,重新实现 Apacheexamples.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
以及它是如何做到的,但这真的是在兔子洞里。它在哪里结束?