1

私の先生は、ファイルサーバープログラムObjectInputStreamReaderで書くことが義務付けられていると言いました。理由を聞いたところ、ファイルサーバープログラムとしては快適だとのことでした。必要な理由ではないと思います。なぜInputStreamReaderまたは他の代替手段を使用できないのですか?上の利点は何ObjectInputStreamReaderですかInputStreamReader

クライアント/サーバーのコードは次のとおりです。

public class Client {
    public static void main(String[] args) {
        Socket s = null;
        ObjectInputStream ois = null;
        ObjectOutputStream oos = null;
        Scanner sc = new Scanner(System.in);

        String data = "";
        try {
            s = new Socket("localhost", 1234);
            System.out.println("client is connectd");

            ois = new ObjectInputStream(s.getInputStream());
            String jai = (String) ois.readObject();
            System.out.println("DATA from SERVER:" + jai);
            oos = new ObjectOutputStream(s.getOutputStream());
        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println("Enter file name:");
        try {
            String fil = (String) sc.next();
            OutputStream pw = new FileOutputStream(fil + ".new");
            oos.writeObject(fil);
            data = (String) ois.readObject();
            pw.write(data.getBytes());
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        System.out.println("Content of file:" + data);
    }
}

誰もが実際の理由を言うことができますか?

4

2 に答える 2

2

AnInputStreamは、ファイルシステム、URL、ソケットなどからの読み取りを含む、あらゆるタイプの入力ストリームを定義するために使用できる抽象クラスです。

InputStreamそれ自体は何の意味もないので、実際には作成しません。むしろ、提案されたなど、特定のタイプのデータの読み取り/書き込み方法を定義するタイプを作成します。このクラスは、書き込まれるデータがJava (またはを実装する)であることを定義します。一般的なファイルデータ、画像、オーディオ、およびその他のさまざまなタイプに使用されるものは他にもあります。InputStreamObjectInputStreamObjectSerializableExternalizableInputStreams

ObjectInputStreamReaderに書き込むことを目的としたこのようなクラスを自分で作成しない限り、のようなものはありませんObjectInputStream

詳細については、ObjectInputStreamおよびInputStreamJavaドキュメントを参照してください。

于 2012-05-23T13:32:49.600 に答える
2

私はあなたが意味ObjectInputStreamしていると思いますBufferedInputStream(読者ではありません)。

ObjectInputStream入力ストリームをラップし、ストリームから特定のタイプのデータを読み取ることができる型付きメソッドを提供します。たとえばreadDouble()readObject()など。

BufferedInputStream追加のAPIを提供しません(通常と比較してInputStream)。それが行う唯一のことは、データのバッファリングです。つまり、バイトごとに読み取るよりもはるかに効率的な方法で、チャンクごとにデータを読み取ります。

于 2012-05-23T13:34:31.523 に答える