• ベストアンサー

入出力について

今入出力について勉強しているのですが、基本的な部分の理解にかけていて困っています。どなたか以下の点についてご返事いただけないでしょうか。 1.バッファとは・・・ 2.バイト配列とは・・・ 3.markメソッドの引数に0を入れても-の数字を入れてもエラーがでないんですがどんな数値を入れておいてもresetされるんですか?markメソッドについて教えてください。 4.入出力について詳しく述べられているサイトがあれば教えてください。 よろしくお願いします。

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

  • ベストアンサー
  • hidebu-
  • ベストアンサー率53% (45/84)
回答No.3

こんばんわ、、、ふたたびです mark(int readlimit)のreadlimitとは何バイト分先読みできるかということです。 まず、mark(int readlimit)がよばれると BufferedInputStreamクラスのprotected int marklimitフィールドにreadlimitの値がわたされます。 それとともにprotected int markposフィールドに現在のオフセット位置がわたされます。 そして、reset()メソッドが呼び出されると上記のフィールドmarkposの値をもとにオフセット位置を戻すのですが、marklimitフィールドが参照されている場所というのはprivate fill() throws IOException というメソッドが呼ばれたときだけなのです。 しかもそのメソッドの中でも目安程度にしか使われておらず、「とりあえずはmarklimitとデフォルトで確保したバッファ配列を比べてみてmarklimitのほうがおおきかったら、marklimitの値をもとに配列を確保しなおす」程度の扱いです(笑)(正確に細かくいうと多少違いますが、イメージ的にはこんな感じです)。 仮にmarklimitを基準に確保しなおしたバッファで足りなくなったとしても、オーバーフローしないようにバッファを新たに確保しなおしてしまいます。 だらだらとした説明になりましたがおわかりいただけたでしょうか??

taganyan
質問者

お礼

とってもわかりやすかったです。ありがとうございます!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • hidebu-
  • ベストアンサー率53% (45/84)
回答No.2

1、一時的にメモリへデータを保存しておくこと 2、データを1バイトづつバイト型変数の配列に格納すること 3、mark(int)→マーク位置を設定するメソッド。mark→現在のマーク位置を示すフィールド reset()→マーク位置までバッファを戻すメソッド 4、APIリファレンス こんな感じでよろしいでしょうか?

taganyan
質問者

補足

ありがとうございます。 しかし、markの引数に100を入れてもマイナスの数を入れても同じ結果が得られるのですが・・・どういうことなんですか?

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

下記のサイトはJavaの基礎やサンプルがいっぱい載っていてわかりやすいですよ。 参考になればいいんですが・・・・。

参考URL:
http://members11.tsukaeru.net/msugai/java/index.html
taganyan
質問者

お礼

ありがとうございました。参考にしてみます。 でもサイトにはバッファとバイト配列の意味が乗っていなかったんですが・・・

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • markメソッドについて

    入出力のReaderクラスでmarkメソッドがよくわかりません。 APIにはストリームの現在位置にマークを設定するとかいてありますが、何のことなのかさっぱりです・・・ bufferedInputStream.mark(100);    この引数の100は何の数ですか?

    • ベストアンサー
    • Java
  • x.divmod(y)

    レシーバーとなる数値を引数で割って商と余りを配列にして返す divmodメソッドの読み方を教えてくれませんか? お暇な時でけっこうです^^よろしくお願いします。

    • ベストアンサー
    • Ruby
  • CASL1

    CASL1の問題でわからないものがありました。お手伝いいただけると助かります。問題に解説も載っていたので一緒に載せておきます。きっとそれほど難しくない問題なのでしょうが、CASLになれない為参考書を読んでもよく理解できません。。 10進入力と数字コード 入力 1~4個の10進数字の列。 出力 入力を正の10進数とみなしたときの2進表現。但し、有効数字のみを出力すること。 例:入力 2006[Enter] 出力 11111010110(メモリーの16ビット表現をそのまま出力した 0000011111010110は不可) 解説: (1)CASLの入出力はメモリー上の連続する領域(入出力バッファ)に文字データとして置かれた内容をINマクロ、OUT マクロでバッファの名前(先頭番地に付けたラベル)、バッファの長さを指定して行う。 (2)文字列を10進数として処理するためには、各文字が意味として0~9の数値をもつこと、各桁が10の冪乗の重みをもつことを理解する必要がある。前者では文字データから数値への変換(文字0~9に対するJIS の文字コードは連続しているので文字0に対するデータを引けば数値になる)し、後者では(それまでに処理した)上位桁の数値を10倍して次の新しい桁の数値を加えればよい。CASLには乗算の命令はないので2倍したもの(左1ビットシフト)と8倍(更に左2ビットシフト)したものとを加えればよい。 (3)数値を2進数字の列として求めるには1ビットずつ処理してシフトすればよい。例えば、1とAND を取ると最下位ビットが抽出される。

  • コマンドライン引数のチェック

    args[]ってString型の配列変数ですよね? たとえば、 コマンドライン引数で数字を受け取って演算するために Stringからint等の数値に変換するとします。 Integer.ParseInt()を使うと、もし数字ではない引数 だったときに例外処理が発生します。 事前に文字か数字がチェックする方法はあるのでしょうか? それとも例外処理で対応するしかないのでしょうか?

    • ベストアンサー
    • Java
  • Rubyのブロックについて

    こんにちは、いつもお世話になってます。 本を読んでいくうちに、メソッドの引数の最後に&をつけたものとyieldを書いたものの違いがほとんどないように思えました。 この違いを考えてみたらyieldは引数が持てることくらいしか思いつかないのですがそう考えていいですか? そもそも基本から両者を間違って理解していたら申し訳ございません。

    • ベストアンサー
    • Ruby
  • Array#shift().to_iの意味

    Array#shift().to_iの意味 Array#shift()メソッドの意味は先頭の要素を配列から取り除いて、それを呼び出し元に戻すものだと思います。 to_iメソッドは数字に変換するものだと認識しています。 では、Array#shift().to_iメソッドはArray#shift()メソッドで戻す要素を数字に変換するという理解でよいのでしょうか?

    • ベストアンサー
    • Ruby
  • Excel の SUM 関数の引数について

     Office 2003 です、Excelについて質問します。  縦一列の数字のSUMを取ろうとしたところ、「SUM」関数を使うと吹き出しが出て、「SUM(数値1、[数値2],....)」 と表示されました。  この[数値2]以降の引数の意味は何でしょうか。  ヘルプで色々と検索をかけましたが、分かりませんでした。  そもそもSUM関数で引数が2個以上あるのが理解出来ないのですが宜しくお願いします。

  • 複数のストリームからのデータの受け取り

    お世話になっております。 今、一つのホストに対して複数のホストからいっせいにデータを送るというプログラムを組もうとしています。 送りたいデータはdouble型の配列なのですがストリームに書き込むには多分? OutPutStreamクラスのwrite_double_arrayというメソッドを使うようなのですがこれの使い方がいまいちわかりません。 public abstract void write_double_array(double[], int offset, int length) とあるように抽象メソッドなのでサブクラスでオーバーライドしなければいけないようなのですが、実装の仕方がわかりません。 また、これの引数のoffsetとは送信する複数のホストすべてで共通だとまずいですか? 入出力に関してはあやふやなところがおかしいのでなにか間違って認識しているようでしたらその指摘もお願いします。

  • 継承について(長文です)

    いつもお世話になっています。現在、継承についての練習問題を解いているのですがわからないことがあるので質問させていただきます。 問題は、「自己紹介メソッド(抽象メソッド)を持つIntroduceクラスを作成し、そのクラスを継承してFistsNameクラス、FullNameクラス、IncludeAgeクラスを作成しなさい。三つのサブクラスのインスタンスを混合して配列に保持し自己紹介をしなさい」というものです。 それぞれのクラスはコマンドライン引数で名字(引数一つ)だけ、フルネーム(引数二つ)、フルネームと年齢(引数三つ)と3種類の引数を入力することによって適切なメソッドが呼び出されるということです。(わかりにくい文章ですいません。例えばヤマダと入力すればFirstNameクラスの自己紹介メソッドが呼び出されてヤマダと表示させたいのです)引数をサブクラスに渡さないと行けませんが、まずコンストラクタで引数をサブクラスに渡す場合は引数を一つ(もしくは二つ)しか指定しなかったときはフルネームとフルネーム+年齢のクラスでコンパイルエラー(ArrayIndexOutOfBoundsException)が出ます(これは理解することが出来ます)次にメソッドで渡す場合はシグネチャが異なるのでオーバーライドされずこちらもコンパイルエラーとなります。この他に引数をサブクラスに渡す方法はあるのでしょうか? わかりにくい文章になってしまいましたが、要するに三つのサブクラスをインスタンス化しその後、引数の個数により適切なサブクラスのメソッドが呼び出され引数を連結して表示させたいのです。このようなことは実現できないのでしょうか?if節によって引数の個数で場合分けなどをしないといけないのでしょうか?質問文がわかりにくければ補足させていただきます。よろしくお願いします。

    • ベストアンサー
    • Java
  • 結果が100になるプログラム(pascal)

    『「123456789」 左の数列の数字の間(1の左にも入れる)に「-」か「+」、もしくは何も入れないで得た式を計算し、合計が100になった場合その時の式を出力せよ』という課題が出ました。 間に入れる文字の配列を作りそれを数列に挿入し計算、合計が100ならその式を出力し配列を変えまた計算・・・という流れです。 配列において「+」=1,何も入れない=0、「-」=-1 と数字に置き換え最初は左から(-1、-1、-1、-1、-1、-1、-1、-1、-1)を入れ(=-1-2-3-4-5-6-7-8-9)、一番右を1ずつカウントアップして配列を変えていきます。 配列は作れたのですが、それを挿入して計算するところでつまずいてしまいました。アシスタントの方に尋ねて ・スタックを使う ・-か+が出るまで、取り出してる数を10倍していく という方法は理解できたのですが、それをプログラムにするのができません。 どなたかご教授お願いします。