2008年 1月 22日 火曜日 |
「既存のDB技術と一線を画し、高速検索を実現する」を進化させる English Translation: (Yahoo!) / (Google) ちょっと出遅れ感がありますが、ちまたで話題のデータをすべてファイル名扱いにして高速検索を実現?を進化させてみました。記事によればデータは62進数(アルファベット大文字/小文字+数字)を使い62進数でデータを格納する方式とのことですが、いくつかのファイルシステムではファイル名の大文字小文字を区別しないため意図しないデータが検索されてしまいます。この問題に対応するために今回はポータビリティに優れたJavaで36進数(数字10字+アルファベット26字)を使ったデータ格納方式を実装しました。
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
public class ThirtySixOutputStream extends OutputStream {
private byte[] buf = new byte[64];
private int ptr = 0;
@Override
public void write(int b) throws IOException {
buf[ptr++] = (byte)b;
if (ptr >= buf.length) flush();
}
@Override
public void flush() throws IOException {
StringBuilder d = new StringBuilder();
for (byte b : buf) {
if (b < 36) d.append("0");
d.append(Integer.toString(b, 36));
}
new File(d.toString()).createNewFile();
ptr = 0;
}
}
画期的ですね!
明日のHot Topic Seminar向けのPuzzlerの問題にしようと思いましたがプログラムが長くなってしまったのでボツネタになってしまいました・・・。 投稿されたコメント:
★ お名前を空欄にするとIPアドレスが、お名前欄に記入されます。
|
Today's Page Hits: 584 |