2008年10月31日 星期五

[Java][O'REILLY] Java I/O技術(note) - part1

Java的大部分I/O形式分兩種:

1.byte & number,由輸入輸出的stream處理。
2.character 與 text,由readerwriter 處理。
stream:
是一連串又順序,但長度尚未判斷出來的位元組。

input stream:

把位元組從某個一般性的外界來源搬進Java程式。

output stream:

把位元組從Java程式內部搬到某一般性的外部目標,在某些情況下,串流能把位元組從Java程式的某部分搬到另一部分。

flush():

一般來說,緩衝區未滿之前,資料是不會被送出去,但如果你希望對方能儘快收到資料(或其他原因),可以呼叫flush()強制出清緩衝區,不管緩衝區是否滿了。
請注意,flush()並不會出清作業系統或硬體的緩衝區。輸出串流的緩衝區,與硬體或OS的緩衝區是兩回事。若要出清這類緩衝區,可以考慮使用FileDescriptor類別的sync()。

除非有特殊用意,否則我們不會刻意出清緩衝區。因為當串流關閉時,緩衝區內的的資料會被自動寫到目的地,串流會在程式結束時,或你使用close()方法時被關閉。


什麼時候會用到flush():

1.若你的程式大打算透過網路傳送一堆資料,你應該週期性的出清緩衝區,確定資料已經送出。
2.在出錯一個會當掉的程式時。照理說,所有輸出串流在緩衝區被填滿時會自動出清,這是在程式能正常結束的前提下,這沒有問題。但如果程式不正常結束,則緩衝區就會殘留資料。此時除非每次寫入資料後去可以呼叫flush(),否則就無法依據輸出的資料來判斷程式當掉的地方,因為程式可能出錯之後繼續執行一段時間。
3.System.out、System.err和某些列印串流(print stream),在每次呼叫println()之後,以及每次寫入的字串遇到'\n'換行字元之後,緩衝區會被自動出清。你可以在PrintStream建構式中,設定是否啟動自動出清。

system.out:

system.out是printStream的實體,若你在關閉system.out之後試圖寫入它,他並不會對出IOException,只不過要寫的東西不會出現吧了。這是因為system.out的使用率太頻繁,因此Sun決定讓它吃掉所有IOException,免得每次都要用try/catch包著它。因此在所有串流中System.out算是一種特例。

[Java]關於FilenameFilter的使用



import java.io.FilenameFilter;
import java.io.File;

class HTMLFilter implements FilenameFilter {

public boolean accept(File dir, String name) {
return (name.endsWith(".html"));
}
}

class Main {

public static void main(String[] args) {
String dir = ".";
if (args.length == 1) {
dir = args[0];
}

File f1 = new File(dir);
int i;
String[] ls;
FilenameFilter filter = new HTMLFilter();
System.out.println("HTML Files: ");
for (ls = f1.list(filter), i = 0;
ls != null && i < ls.length;
System.out.println("\t" + ls[i++])) {
;
}
}
}


[REF]http://home.tiscali.nl/~bmc88/java/sbook/0128.html

2008年10月30日 星期四

[Mood]地震

早晨6:30am
幹~被地震震醒的感覺真不好= =

[Java]動態生成JButton 問題究竟出在哪裡?(已解決)

問題究竟出在哪裡?

import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Main extends JFrame {

JFrame myFrame;
JPanel myPanel;
JButton btn[];
Toolkit toolkit = Toolkit.getDefaultToolkit();

Main() {
myPanel = new JPanel();


for (int i = 0; i < 5; i++) {
btn[i] = new JButton();
myPanel.add(btn[i]);
}
add(myPanel);
}

public static void main(String argv[]) {
Main app = new Main();
app.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {
System.out.println("Frame closing...");
System.exit(0);
}
});
app.setVisible(true);
app.repaint();
}
}


原來是這裡忘了初始= =

JButton btn[];

改成

JButton btn[] = new JButton[5];

[Java]有關Acegi

感覺很像是好東西,先收起來再說^^
點我下載

[REF]http://www.javaworld.com.tw/jute/post/view?bid=43&id=243119&tpg=1&ppg=1&sty=1&age=0#243119

2008年10月29日 星期三

[Skill]Symantec的防火牆擋印表機連線

Symantec的防火牆也太強了啦~
連local端的印表機都擋。

今天打工的時候幫別人弄電腦,
說不能列印,
結果搞了半天,才發現原來是Symantec防火牆高的鬼~
關掉就沒事了

2008年10月26日 星期日

[Java]有關Float的宣告

有關Float的宣告,是要這樣寫喔


float a1[] = {0.2f, 0.4f, 0.6f, 0.8f, 1.0f};


緊記緊記~