【初心者】 Java質問・相談スレ26 【大歓迎】
責任って何の責任だ?ておもた。
俺もついでに逝ってきまつ
BufferedWriterクラスにある、
flushメソッドってどういう時に使うんですか?
ドキュメントには「ストリームをフラッシュします」と説明があるのですが
意味がわかりません。
教えて下さい。
訂正です。
どういうときにというか、何の役割をしているのかが分かりません。
前半部は省略してますが、この中にでてくるflushメソッドです。
ーー(省略)ーー
public void writeData() {
try {
FileDialog fd = new FileDialog (this,"Input File name.", FileDialog.SAVE);
fd.setVisible(true);
String fname = fd.getDirectory() + fd.getFile();
FileWriter fw = new FileWriter(fname);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(ta1.getText());
bw.flush();
} catch (Exception e) {
System.out.println(e);
}
}
お願いします。
>>956 bw.close() がどこにも無いね。ちょっとアレなコードかも。
FileWriter ってのは OS のファイル書き込みAPI呼ぶんだけど、
これは OS 内部でバッファリングしてる可能性があって write しても即座にディスクには書き込まれる保証は無い。
BufferedWriter はそれ自体がバッファリングしてて
write してもバッファが満タンになるまでは FileWriter に対して write しない。
flush すると BufferedWriter はバッファが満タンになってなくても自分のバッファ内のデータを全部
FileWriter に write して、FileWriter の flush() を連鎖的に呼び出す。
FileWriter の flush() は先に書いたように OS 内部でバッファリングしてても
バッファの中身をディスクに書き出すように指示する。
簡単にいうと flush() が無いとファイルの内容が尻切れトンボになる可能性があるわけよ。
ちなみに水洗トイレの水を流すことを"flush"という。
そして
>>955よ、
この場合流されるのはウンコなわけだ。
このことを常に心に留めていて欲しい。
>>957.958
ありがとうございます。
>>959 ある意味ありがとうござます、かな?
flush()があるこで、バッファリングされているものを直ちに書きはじめて、
かつ、全てを完全に吐きだしてくれる。
みたいなことをしてくれるって解釈でいいですか?
でも、flush()がないとなんで完全に吐き出してくれないのかが疑問なのですが。。。
>>960 flush() 無しで即座にディスクに書きに行くと
例えば for(int i = 0; i < 256; i++) out.write(i);
みたいな処理があると、そのたんびにディスクまで書きに行くことになる。
ディスクに書くってのは物理ディスクへのアクセスの遅さもさることながら
ファイルサイズとかファイルの更新日時の更新とかもせにゃいかんわけで。
結構シャレにならないわけですよ。
たぶん HDD とかの寿命も短くなるんじゃないかと。
そもそもclose()がないわけだが
>>961 いままで flush() を使ったことがなかった、、、
今度から気をつけよう。
close()について語ってください。
public class Aclass extends Applet{
Dat dat1[]; //配列になってます。数はdatnum個
int datnum;
string filename;
Bclass data_in;
(ファイル名入力フォーム => filename)
data_in.B_decode(filename,datnum,dat1[])
}
class Bclass{
public B_decode(string filename,int num,Dat[],X[){
(filenameのファイルからdata数を読み込み(=>num)、Dat[num]を割り当てる。)
}
}
class Dat(){
int a;
int b;
public Dat(int a,int b){
this a = a;
this b = b;
}
}
上記のようなことをやりたいのですが、このときdatnumをBclassで読むため、
C言語的に言うならBclassでmalloc(メモリ割り当て)しないといけないと思います。
そのときAclassからBclassへどうやってdat1[]を渡せばよいのでしょうか?
ぶっちゃけDatがBclassからも見えれば問題ないのですが、どうもうまくいきません。
どうか よろしくおながいします。
( ゚д゚) ポカーン
( ゚д゚) ポカーン
>>966 ファイルを読んだりする前に、「配列変数」 と 「配列オブジェクト」の違いを
明確に理解されることが必要と感じました。
>へどうやってdat1[]を渡せばよいのでしょうか?
と書かれていますが、dat1[] ってなんのことだかわかりません。
メソッドの引数として配列変数を渡すことは出来ません。
渡すことができるのは、配列オブジェクトです。
>>969 ううむ、どうも見当違いのことをやっているみたいですね。レスサンクスです。
もっかい参考書とにらめっこしてきますです。。。
新スレの季節!!
>>963-964 ソース読めば分かるが、
close()呼ぶと、flush()も内部で呼ばれるよ。
973 :
デフォルトの名無しさん:03/07/04 18:31
>>972 まあ、明示的に書くのが基本でありマナーでもある
「イク」時は「イクッ」っていうのがマナー それと同じだよ
>>963,964
実は使い終わったらきちんとclose()するようにすれば
そのなかでflushは呼ばれるので
ファイルについてはあんまり気にする必要がない場合も多い。
気にする必要があるのは標準出力にリダイレクトしたり
ネットワークに書いたりするとき。
flush()しないとバッファがいっぱいになるまで
ちっとも表示されなかったり
相手に届かなかったりする。
975 :
デフォルトの名無しさん:03/07/04 18:53
呼ばれないOS Unix系
976 :
デフォルトの名無しさん:03/07/04 19:21
サーブレットかJSPでセッションが終了した時に
”セッションが終了しました”みたいなメッセージをhtmlで
表示させたいんですができるのでしょうか?
HttpSessionBindingEventとかを使うのでしょうか?
977 :
デフォルトの名無しさん:03/07/04 19:37
>>976 HttpSessionListenerを実装して
sessionDestroyed()で後処理ができる
ただ、ユーザに対してそれを通知するようにできるのかはわからん
だって、このメソッド呼ばれるときにはセッション切れているはずなので
どのユーザに対しておくりゃいいの?って感じ
アプリ側で切るのなら大丈夫だが・・・
BindListenerに関しても
ま、一回試してみるしかないんじゃない?
978 :
デフォルトの名無しさん:03/07/04 21:27
J2SE 1.4でXMLを,つまりDOMやSAXを勉強したいんですが,
世間ではXercesを使っている例が多いようです.
しかし,デフォルトでJAXP 1.1というのが入っていて,
DOMなんかが使えるようですが,一体どちらを勉強したら良いのでしょうか?
もしかして,XercesはJAXPに対して何かメリットがあるんで,
一般的に使われてるのですか?
979 :
デフォルトの名無しさん:03/07/04 21:57
一般で販売されているjavaでつくったソフトってどうやって逆コンパイルを防いでいるんですか?
もしくは何もやってないんですか?
逆アセンブルを防ぐのは無理なんじゃないかな
981 :
デフォルトの名無しさん:03/07/04 22:04
>>978 もうそろそろ、JAXPに移行し始めてる
>>979 何もやってない
単文字にするぐらいだろやるといっても・・・
だいたい、Javaで出回るソフトなんて
自社のために作ってくれたものだから
そんなもの逆コンパイルしたところで
意味ない
おら、なんか質問すれよ
983 :
デフォルトの名無しさん:03/07/04 23:04
JAVAのしようしょてなに?どんなこと書いてあるの?UMLなの??
あとJAVAプログラマーってコーディングする前ってなにするの?
CALSSの抽出とかもやるの?
984 :
デフォルトの名無しさん:03/07/04 23:11
>>983 全部正解だよ
Javaの仕様書ってJVMのことか?
それとも、APIか?
よくわからんがどっちにしてもJavaについてかかれている
コーディングする前にClass抽出(設計)とタバコ
985 :
デフォルトの名無しさん:03/07/04 23:13
>>984
ありがと。
JVMって邪場のバーチャルマシンでしょ?
APIって標準ライブラリでしょ?
自分が言ってる仕様書ってSEさんが書いてPGにつくって言ってわたす紙のこと
987 :
デフォルトの名無しさん:03/07/04 23:23
>>986 いや、Javaの仕様書って書くからさ・・
それを言うならプログラム、アプリの仕様書だろ?
UMLは一部の図しか使わない(ユースケースとか)
要件とかが大半を閉める
>>987 親切にありがとう
あと詳細設計てどのくらい詳細なの?
要件とは文の事?
990 :
デフォルトの名無しさん:03/07/04 23:31
書いてるSEにもよる(詳細さは)
要件はたとえば、大まかに言うと
「こういうプログラムを作ります」
細かく言うと
「このダイアログボックスはこういうデザインで・・・・
ここの値はユーザーが変更できるようにします」とか
動作からデザインまで細かく書かれた請求書みたいなものだ
今サーブレットやってんだけど、フツーのJAVAの開発も
クラスさえ覚えればなんとかなる?
>>992 コーダーと呼ばれる立場なら、それでオケ。
設計に関わりたいなら、それだけじゃ全然ダメ。
>>993 今時コーダーなんているの?どんなプログラマでも詳細はやるだろ?
996 :
デフォルトの名無しさん:03/07/05 00:45
Java、質問、をぐぐってこちらに辿り着きました。
どうしても分からなかったので、教えて頂いて宜しいでしょうか?
Javaを同じページに二つ以上使ってしまうと、片一方が動かなくなります。
両方動かすには、どうしたらいいんでしょうか?
色んなページを検索したのですが、初歩的過ぎるのか何処にも書いていなくて…。
場違いでしたら、お許し下さい。
>>996 もしかして、JavaScriptの話かな。
ここは違うよ。
>997
Appletじゃねーのかな?
2
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。