C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

JavaのBufferedReaderのclose処理につい

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■84967 / inTopicNo.1)  JavaのBufferedReaderのclose処理につい
  
□投稿者/ sasaki (1回)-(2017/08/30(Wed) 13:53:14)

分類:[Java] 

こんにちは。
JavaのBufferedReaderのclose処理について、教えていただけないでしょうか。
SocketやServletなど、システム/フレームワークから取得したInputStreamに、
BufferedReaderをラップして利用することは可能でしょうか。
可能だとしたら、どのようにclose処理を記述すればよいでしょうか。
システム/フレームワークから取得したInputStreamは、利用者側でcloseしてはならない場合があるかと思います。
その場合、BufferedReaderは、closeしなくてもよいものなのでしょうか。

例)
ServerSocket serverSocket = new ServerSocket(port);
Socket socket = serverSocket.accept();
InputStream inputStream = socket.getInputStream();
Xxxx.proc(inputStream); // メソッド呼び出し
………
// 以降もinputStreamを利用します。

public static void proc(InputStream inputStream) {
BufferdReader bufferdReader = new BufferdReader(inputStream);
………

// この後inputStreamは、呼び出し元で利用されるので、BufferedReaderはcloseできないと思うのですが、どうするべきでしょうか?
}

よろしくお願いします。
引用返信 編集キー/
■84970 / inTopicNo.2)  Re[1]: JavaのBufferedReaderのclose処理につい
□投稿者/ Hongliang (562回)-(2017/08/30(Wed) 20:33:10)
> SocketやServletなど、システム/フレームワークから取得したInputStreamに、
> BufferedReaderをラップして利用することは可能でしょうか。
可能です。

> 可能だとしたら、どのようにclose処理を記述すればよいでしょうか。
> システム/フレームワークから取得したInputStreamは、利用者側でcloseしてはならない場合があるかと思います。
> その場合、BufferedReaderは、closeしなくてもよいものなのでしょうか。
しなくても構いません。
基本的にはコンストラクタで渡されたストリームをcloseするだけなので。

ただ、バッファリングによって、ストリームが想定以上に消費されている可能性があります。
例えば改行含め50文字のテキストが100行あるストリームに対してBufferedReaderを作ってreadLineを3回呼び出したとします。
呼び出し元に制御が返った後、呼び出し元は4行目の先頭にストリームの現在位置があることを期待するかも知れませんが、実際はもっと先まで読まれ済みになっているでしょう。
引用返信 編集キー/
■84980 / inTopicNo.3)  Re[2]: JavaのBufferedReaderのclose処理につい
□投稿者/ sasaki (3回)-(2017/08/31(Thu) 11:05:53)
closeしなくてもかまわないこと分かりました。ありがとうございます。
バッファリングのため、先読みされている可能性があること、留意します。
助かりました。
引用返信 編集キー/
■84981 / inTopicNo.4)  Re[3]: JavaのBufferedReaderのclose処理につい
□投稿者/ sasaki (4回)-(2017/08/31(Thu) 11:06:46)
解決チェックを付けました。
ありがとうございました。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ