2008/11/25

[ LOS ] Measure IDE / SATA hard disk data transfer speed

如在 CentOS Linux 下做硬碟的 Benchmark 測試?使用內鍵工具 hdparm

# hdparm -t /dev/hda2 # 測試 IDE hda2 硬碟每秒讀取時間
/dev/hda2:
Timing cached reads: 1348 MB in 2.00 seconds = 673.60 MB/sec
Timing buffered disk reads: 168 MB in 3.02 seconds = 55.64 MB/sec

# for i in 1 2 3; do hdparm -t /dev/hda2; done # 連續測三次
/dev/hda2:
Timing buffered disk reads: 168 MB in 3.02 seconds = 55.68 MB/sec

/dev/hda2:
Timing buffered disk reads: 166 MB in 3.02 seconds = 55.00 MB/sec

/dev/hda2:
Timing buffered disk reads: 110 MB in 3.00 seconds = 36.62 MB/sec

參數說明:

-t : 實際硬碟讀取時間
-T : 硬碟快取讀取時間
/dev/sda : 硬碟名稱 sd 開頭為 SATA 硬碟 hd 開頭為一般 IDE 硬碟

參考:

http://www.cyberciti.biz/tips/how-fast-is-linux-sata-hard-disk.html
http://sourceforge.net/projects/hdparm/

2008/11/07

[ Java ] About Interface & Implements

Java 介面(Interface) and 實作(Implements)

定義撥放器介面 IPod


public interface IPod {
String d1 = "MP3";
String d2 = "VIDEO";
void Play(String disk);
}

定義 MP3 的類別 IMP3 同時需實作 IPod 這個 Interface

public class IMP3 implements IPod {
public void Play(String disk){
if (disk.equals(d1))
System.out.println("Music Playing\n");
}
}

定義 VIDEO 的類別 IVIDEO 同時也實作 IPod 這個 Interface

public class IVIDEO implements IPod {
public void Play(String disk){
if (disk.equals(d2))
System.out.println("Video Playing\n");
}
}

主程式 JPlayer

import java.io.*;
public class JPlayer {
public static void main(String[] args) throws IOException {
BufferedReader keyin = new BufferedReader(
new InputStreamReader(System.in));
System.out.println("Please Input MP3 or VIDEO ?");
String st = keyin.readLine();
System.out.println();

IMP3 p1 = new IMP3();
p1.Play(st);

IVIDEO p2 = new IVIDEO();
p2.Play(st);
}
}

結果:

Please Input MP3 or VIDEO ? VIDEO
Video Playing

Please Input MP3 or VIDEO ? MP3
Music Playing

說明:

Java 的 Interface 中包含了資料成員及方法成員,『資料成員』的內容一定要有設定值或宣告常數。而『方法成員』中只能定義功能的原型,其實作功能內容則交由相關聯的類別處理。此程式為一個模擬撥放器 JPlayer,可提供 MP3 及 VIDEO 撥放功能介面,當選擇 MP3 時則撥放音樂;當選擇 VIDEO 時就會撥放影片。

2008/11/05

[ Java ] About Override & Super

Java 覆蓋 (Override) 範例:


class JCatKind{
private String kind;
void SetKind(String k){
kind = k;
}
void Show(){
System.out.println("Pet Kind :"+kind);
}
}

class JCat extends JCatKind{
private String name;
private int age;
void SetName(String n){
name = n;
}
void SetAge(int a){
age = a;
}
void Show(){
System.out.println("Pet Name :"+name);
System.out.println("Pet Age :"+age);
}
}

public class JOverride {
public static void main(String[] args){
JCat cat = new JCat();
cat.SetKind("波斯貓");
cat.SetName("小花");
cat.SetAge(1);
cat.Show();
}
}

輸出:

Pet Name :小花
Pet Age :1

說明:

程式中有兩個Show()方法,子類別JCat會繼承父類別JCatKind的成員,而子類別中同樣有定義了一個與父類別相同的名稱方法成員且傳入的參數及型別皆相同,此時父類別中的方法會被子類別中的方法給覆蓋掉,當我們呼叫Show()方法時只會執行子類別的Show()方法。


Java 使用 Super 範例:


class JCatKind{
private String kind;
void SetKind(String k){
kind = k;
}
void Show(){
System.out.println("Pet Kind :"+kind);
}
}

class JCat extends JCatKind{
private String name;
private int age;
void SetName(String n){
name = n;
}
void SetAge(int a){
age = a;
}
void Show(){
super.Show();
System.out.println("Pet Name :"+name);
System.out.println("Pet Age :"+age);
}
}

public class JOverride {
public static void main(String[] args){
JCat cat = new JCat();
cat.SetKind("波斯貓");
cat.SetName("小花");
cat.SetAge(1);
cat.Show();
}
}

輸出:

Pet Kind :波斯貓
Pet Name :小花
Pet Age :1

說明:

JCatKind的Show()方法雖然被Override掉,但並不表示它已經不存在,我們可以使用Super將它保留,只要在子類別JCat的Show()方法內加入『super.Show();』即可呼叫父類別中被覆蓋掉的方法。

2008/11/02

[ Java ] About Constructor

Java 建構子 (Constructor) 範例:


class JCRectArea {
private int height, wide;

JCRectArea(){
height = wide = 1;
}
JCRectArea(int h){
SetHeight(h);
wide = 1;
}
JCRectArea(int h, int w){
SetHeight(h);
SetWide(w);
}
void SetHeight(int h){
height = h;
}
void SetWide(int w){
wide = w;
}
int GetArea(){
return height*wide;
}
}


public class JConstructor {
public static void main(String[] args){
JCRectArea a1 = new JCRectArea();
System.out.println("AREA ="+a1.GetArea());
JCRectArea a2 = new JCRectArea(5);
System.out.println("AREA ="+a2.GetArea());
JCRectArea a3 = new JCRectArea(3,6);
System.out.println("AREA ="+a3.GetArea());
}
}

輸出:

AREA =1
AREA =5
AREA =18

說明:

建構子(Constructor)宣告建立一個物件之同時也給予資料成員初始化之動作,類別的建構子也就是一種類別內部方法成員。建構子使用時須特別注意:

1.Constructor 定義的方式與 Method 相似。
2.Constructor 名稱會與類別名稱相同。
3.Constructor 不能使用修飾子也無回傳值所以不能使用 return 及 void。
4.Constructor 可以使用方法多載(Method Overloading)。

範例程式為一個計算矩形面積的程式,若矩形的邊長沒有設定值(系統預設為1)。在這個範例中有三個建構子每個建構子所配置的參數皆不同。