• ベストアンサー

BufferedReaderの内部動作について

Java入門書などで勉強中の初学者です。 BufferedReaderの動作についてよくわかっていないため、以下の内容にお答えいただけると幸いです。 - BufferedReaderがデフォルトで保持できるデータサイズ - 確保しているバッファサイズを超えた文字数をreadLine()した時にどのような動作になるか - どのような時にデフォルトのバッファサイズを超えるのか - バッファサイズをデフォルトより大きくして指定した場合のデメリット 以上、よろしくお願い致します。 ※OKWAVEより補足:「Webシステム開発」についての質問です。

  • Java
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • coronoe
  • ベストアンサー率50% (1/2)
回答No.2

勉強お疲れ様です。 わかる範囲でお答えします。 1、BufferedReaderがデフォルトで保持できるデータサイズ こちらは公式文書には明記されていませんが8192だと言うのが意見として多いですね。 https://stackoverflow.com/questions/16973843/bufferedreader-default-buffer-size 2、確保しているバッファサイズを超えた文字数をreadLine()した時にどのような動作になるか こちらはコンストラクタの第二引数にバッファサイズを指定することで初心者の方でも検証可能だと思うので是非調べてみてください。 コンストラクタによるバッファサイズの指定の例はこちらです。 以下なら100バイトをサイズとして指定したと言うことになります。 このサイズを超えるものを入れてみてください。 BufferedReader br = new BufferedReader(new InputStreamReader(System.in),100) 3、どのような時にデフォルトのバッファサイズを超えるのか BufferedReader クラスはテキストファイルなどの読み込みなどにも使用されますのでその際には読み込むものが1で回答したサイズを超えれば発生しますね。 4、バッファサイズをデフォルトより大きくして指定した場合のデメリット 単純にメモリを食います。 Webのアプリなどで使う場合は多人数が同時に使用する可能性があるので注意が必要ですね。 以上です。 自身で検証してみることで文法の学習にもなります。 また、なぜこれを知りたいのかも明記すると答えてくれる人も増えるかと思いますよ。

m12114
質問者

お礼

丁寧な解答ありがとうございました。とてもわかりやすくまとまっており助かりました。 また海外サイトや自身で実装して確認するなどもを行い、質問サイトだけに頼らず、調べる術も学習していきたいと思います。 ありがとうございました。

その他の回答 (1)

  • maiko04
  • ベストアンサー率17% (345/1956)
回答No.1

入門書があるなら書いてあるはずです。 使い方だけ読んでいたらトラブルのもとですよ。 あなたが質問してきた内容はあなたが勉強する内容です。 入門書を読んで、PCなどで動かしてみてどうなるかというのも 勉強のうちです。 新しい事が出てくるたびにここに質問するつもりですか? それでは身につきません。

関連するQ&A

  • Webアプリケーション開発を学ぶためのお勧め入門書を教えてください。

    こんばんは、初めまして。 Javaを使ったWebアプリケーション開発に関する入門書で お勧めの物を紹介していただけないでしょうか? 今年3月からの新入社員教育でJavaを使ったWebアプリケーション開発の 講師をすることになりました。 講師をするのは全然構わないのですが問題は・・・自分はJavaをほとんど使ったことがありません。 素人の状態からあと1ヶ月でJavaを覚えて教材を作らなくてはいけません。 今日も本屋を覗いてみたのですが、Javaの参考書にはWebアプリケーションとは書いてなく、 また、そういったジャンルのコーナーも有りませんでした。 Javaでも種類がいくつかある(?)らしく、どのJavaを覚えればよいのかもよくわかってません。 こんな状態ですが、何かお勧めの書籍はありませんか? 以下書籍の条件です。 ・Java言語を使ったWebアプリケーション開発が中心に書かれている。 ・1からはじめるので入門書レベルの物を・・・ ・開発環境を無料で整えられるもので書かれている。 以上です。よろしくお願いします。

    • ベストアンサー
    • Java
  • java キーボード入力の構文の意味

    独学でJavaを学んでいるのですが、キーボードからの入力を可能にする構文の意味がよくわかりません。 その構文というのは BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) なのですが、以下の意味理解で間違えていないでしょうか? 【構文としての意味】 Systemクラスのプロパティのinを仮引数にするInputStreamReaderクラスのメモリ領域を確保します。そしてそのメモリ領域を仮引数にするBufferedReaderクラスのメモリ領域を確保します。そしてそのメモリ領域をBurredReaderクラスの変数brに代入します。 【ストリームとしての意味】 標準入力はストリームの内、文字ストリームを通ります(選択します)。その時、バッファを介します。 多分間違っているかと思うのですが、もし修正してくださるのであれば、初心者にもわかル用に教えていただけると幸いです。 ちなみに私は「やさいいJava」をとりあえず読み終わった感じのレベルです。

  • staticの動作について

    C++で趣味でゲームを作っているのですが、staticを使ったときのローカル変数の動作について質問があります。 いまいち、ローカル変数の動作が分かっていないのですが、大雑把には、関数が読み出される毎に空いてるメモリを探して、そこを確保する物だと思ってます。 で、staticを用いて宣言すると内容が保持されると言うことは、これは始めに一回だけメモリの確保をして、以降はそれを継続して使っているというものなのでしょうか? だとすると、staticをつかったローカル変数の方が、繰り返しメモリの確保が行われ無い分、処理が早いということでしょうか? いま、ゲーム内では、描画用の関数描画基準座標とサイズを受け渡して入るのですが、どうしても内部で描画終了点と開始点のクリップを計算する必要があり、そのためにどうしても計算した開始点、終了点を保持する変数が必要になっています。 しかし、描画関数はキャラの分と背景描画の分とパーティクルの描画の分と、ゲーム1ループないでも1000回近く(多いときは2000回ぐらい)呼び出されてます。 その度にメモりの確保をされるのはなんか気分が悪いなぁと思ってstaticを何となくつているのですが、実際の所staticを着けたら動作がはやくなるとかと言うことは無いのでしょうか? 宜しくおねがします。

  • キーボード入力について初歩的な質問

    現在Javaを勉強中で、ユーザーのキーボード入力を読み込んで表示する簡単なプログラムで疑問があります。 ----------サンプルコード(読みにくいので例外処理を省略)-------------------------- InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); for(int i=0;i<5;i++){ System.out.print("文字を入力して下さい>>");//・・(1) arr[i] = br.readLine(); //キーボード入力を読み込み・・(2) } ---------------------------------------------------------- 疑問なのは内部での処理なのですが、 上のコードを実行すると、(1)の部分が1行出力されてキーボード入力を待っている状態になります。 ここで適当な文字を入力してキーボードのEnterを押すと、入力が配列へコピーされ、再度ループ頭の(1)へ戻ります。 なぜ"(1)の部分が1行出力されてキーボード入力を待っている状態"が起こるのでしょうか? 自分なりの予想としてはreadLine()は行末までのバッファリングをするので、行末を知らせるEnterを押すまでreadLine()が動き続けているのかなと思うのですが確証がありません。 また、バッファについてですが、ストレージへ保管されるタイミングはキーボード入力を1文字入力するごとでしょうか?Enterを押したタイミングでしょうか? これについてはInputStreamReaderってのが1文字ごとに入力を受け取ってバッファへ送っている、で合っているでしょうか? どなたか詳しい方いらっしゃいましたら、どうぞよろしくお願い致します。

    • ベストアンサー
    • Java
  • Java:ファイルの読み込みはどれが速いのか?

    ファイルの読み込み方法についてです. java.ioのBufferdReader.readline java.nioのCharBuffer(ファイルサイズ分のバッファサイズを指定して一気に読み込むことを想定) org.apache.commons.ioのFileUtils.readFileToString の3つを比較した場合,どれが最も高速にテキストファイルを読み込めるのでしょうか? 一見,BufferdReader.readlineだと1行読み込む度にディスクIOが発生するので,大きなサイズのテキストファイルであればあるほど遅くなるような気がします. 想定しているのは,1ファイル約10000行でサイズが3MBぐらい,それを数十万~数百万ファイル逐次読み込んでいく場合です. 回答よろしくお願いします.

    • ベストアンサー
    • Java
  • javaは、SJISとUTF-8のどちらがデフォルトなのでしょうか?

    javaは、SJISとUTF-8のどちらがデフォルトなのでしょうか? 現在PCにインストールしているJavaのバージョンは、Version 6 Update 21です。 eclips上のコンソールで実行すると、入力がUTF-8の為、equals()での比較が出来ません。 //---以下サンプルソース-- System.out.println("入力"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String strTmp = br.readLine(); //入力 StringBuffer sb = new StringBuffer(); //入力で、”終了”を入力しても、strTmp.equals("終了")が、TRUEになりません。 while(!strTmp.equals("終了")){ sb.append(strTmp); strTmp = br.readLine(); //入力 } //---ここまで--- DOS窓上で、「javac -encoding utf8 sample.java」とやって、テストすると入力もSJISな為、”終了”で終了します。 これは、eclipsの問題ですか? javaのインストール時の設定の問題ですか? 初歩的な質問で、恐縮ですが、どうかご教授下さい。m(_。_)m

    • ベストアンサー
    • Java
  • プログラミング学習paizaの数の並び替え問題

    Eclipseでは上手く並び替え表示されるのですが、paizaで同じコードを提出しても、提出前動作確認でコード実行結果がWrong Anserでエラーになります。原因が分かりません。使用言語はJavaです。 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String line = br.readLine(); ArrayList<Integer> n_ = new ArrayList<>(); n_.add(null); while (line != null) { if (line.equals("")) { for (int a = 1; a< n_.size()-1; a++) { for (int j = a + 1; j < n_.size(); j++) { if (n_.get(a) > n_.get(j)) { int w = n_.get(a); n_.set(a, n_.get(j)); n_.set(j, w); } } } for (int k = 1; k < n_.size(); k++) { System.out.println(n_.get(k)); } break; }else{ int i = Integer.parseInt(line); n_.add(i); line = br.readLine(); } } } }

  • Web(&GUI)クライアントアプリケーションはJAVAの方がPerlより開発しやすい?

    Web クライアントプログラミングに関して、PerlとJAVAでは一般に(ただし小規模)JAVAの方が開発しやすいでしょうか? GUIで考えています。 C,C++,Perl,及び、ネットワークの初歩は理解しているつもりですが、 GUIプログラミングの経験はありません。 やりたい内容によるとは思いますが、例えば、1例として 「マウスで単語を範囲指定し、適当なショートカットキーを押すと辞書検索ページを開いてその単語を調べる」 というようなことをやりたいと考えています。 関連質問 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1175764 現在、JAVAの知識はないのですが、 PerlよりJavaの方が開発しやすいようであればJavaを勉強しようと思います。 (あまり手を拡げたくはないのですが...) また、その場合、Javaの特に何を勉強したらよいでしょうか? 調べたところ、(Javaの基本文法はもちろんですが)GUI関連ではSwing (ライブラリ群の名前と認識していますが違います?)を勉強すればよいかなと考えていますが、正しいでしょうか? Web (&GUI) クライアントアプリケーションをJAVAで開発するつもりならこれを勉強しろ、というアドバイスをいただけたらありがたいです。 なお、入門書籍としては、書店でざっとながめたところ、オライリーの 詳解 Javaプログラミング入門(上)(下) がよさそうかなと思いましたので、購入するならこれと思っておりますが、 (GUI)webクライアントプログラミングの観点でおすすめがありましたら あわせてご教授頂けると嬉しく思います。 宜しくお願いいたします。

    • ベストアンサー
    • Java
  • Javaによるwebアプリケーション

    Javaによるwebアプリケーション web関係の求人を見るとよくJavaの文字を良く見かけます。 実際にはweb関係(ネットワーク?)の方はJavaでどういうシステムを製作されているのですか? PHPみたいな感じなのでしょうか? よければJavaで製作するメリット・デメリットや、会社での開発環境、知っておいた方がいい言語・知識がありましたら教えていただければと思います。 関係ないですが、C#がある程度できるのですが(FTPツール等)、仕事で使われることはあるのでしょうか?

    • ベストアンサー
    • Java
  • jspでファイルの読み込み

    jspでwebサーバーにある“1.txt”ファイルを読み込んでそれを表示するプログラムを作成したのですが、エラーが出てしまいます。サーバーの環境(jsp実行環境等)は問題ありません。以下のコードで何かおかしなところがありましたら教えてください。 <%@ page contentType="text/html" import="java.util.*,java.io.*" %> <% String result = ""; String h_s = ""; FileReader h_fr = new FileReader("1.txt"); BufferedReader h_br = new BufferedReader(h_fr); while(true){ h_s = h_br.readLine(); if (h_s == null){ break; } result = result + h_s; } %> <%= result %>

    • ベストアンサー
    • Java

専門家に質問してみよう