0

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がどのように機能するかを分解し始めることになると思いますが、それは本当にうさぎの穴に落ちています。どこで終わりますか?

http://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net/io/Util.html#copyStream%28java.io.InputStream,%20java.io.OutputStream%29

4

2 に答える 2