J2ME 技術(shù)的學習與實踐者

          [導(dǎo)入]字段輸出流FieldOutputStream


          網(wǎng)站: JavaEye  作者: iwinyeah  鏈接:http://iwinyeah.javaeye.com/blog/174644  發(fā)表時間: 2008年03月21日

          聲明:本文系JavaEye網(wǎng)站發(fā)布的原創(chuàng)博客文章,未經(jīng)作者書面許可,嚴禁任何網(wǎng)站轉(zhuǎn)載本文,否則必將追究法律責任!

          我的FieldOutputStream繼承了DataOutputStream,這樣就可以只更改很少量的代碼就實現(xiàn)了既支持原生格式又支持文本方式輸出了,稍候一段時間手機理財將可以實現(xiàn)備份和恢復(fù)(文本格式)功能了.
          package util;
          /**
           * --------------------------------------------------
           * 字段輸出流
           * --------------------------------------------------
           * 從DataOutputStream繼承
           * 主要增加了向輸出流寫入文本格式的數(shù)據(jù)字段的能力
           * 文本格式流將由TAB分隔字段,回車換行符分隔記錄
           * --------------------------------------------------
           * 
           * @author iwinyeah 李永超
           * @version 1.0.0
           * */
          
          import java.io.DataOutputStream;
          import java.io.IOException;
          import java.io.OutputStream;
          
          public class FieldOutputStream extends DataOutputStream {
          	public final static int BIN_MODE = 0;
          
          	public final static int TXT_MODE = 1;
          
          	private final static byte[] fieldSplit = {'\t'};
          
          	private final static byte[] recordSplit = {'\r','\n'};
          
          	private int mode;
          	
          	private boolean nextEnd = false;
          
          	public FieldOutputStream(OutputStream out, int mode) {
          		super(out);
          		this.mode = mode;
          	}
          
          	// 接著寫入的是否最后一個字段
          	// 寫第一個字段前以參數(shù)false調(diào)用它
          	// 寫最后一個字段前以參數(shù)false調(diào)用它
          	public void setNextEnd(boolean end){
          		nextEnd = end;
          	}
          	
          	public void putBoolean(boolean value) throws IOException {
          		if (mode == 0) {
          			writeBoolean(value);
          		} else {
          			out.write(value ? '1' : '0');
          			out.write(nextEnd ? recordSplit : fieldSplit);
          		}
          	}
          
          	public void putByte(byte value) throws IOException {
          		if (mode == 0) {
          			writeByte(value);
          		} else {
          			out.write(String.valueOf(value).getBytes("UTF-8"));
          			out.write(nextEnd ? recordSplit : fieldSplit);
          		}
          	}
          
          	public void putShort(short value) throws IOException {
          		if (mode == 0) {
          			writeShort(value);
          		} else {
          			out.write(String.valueOf(value).getBytes("UTF-8"));
          			out.write(nextEnd ? recordSplit : fieldSplit);
          		}
          	}
          
          	public void putInt(int value) throws IOException {
          		if (mode == 0) {
          			writeInt(value);
          		} else {
          			out.write(String.valueOf(value).getBytes("UTF-8"));
          			out.write(nextEnd ? recordSplit : fieldSplit);
          		}
          	}
          
          	public void putLong(long value) throws IOException {
          		if (mode == 0) {
          			writeLong(value);
          		} else {
          			out.write(String.valueOf(value).getBytes("UTF-8"));
          			out.write(nextEnd ? recordSplit : fieldSplit);
          		}
          	}
          
          	public void putString(String value) throws IOException {
          		if (mode == 0) {
          			if (value == null) {
          				writeByte(0);
          			} else {
          				writeByte(1);
          				writeUTF(value);
          			}
          		} else {
          			if(value != null){
          				byte[] b = value.getBytes("UTF-8");
          				for(int i = 0; i < b.length; i++){
          					if(b[i] == '\n'){
          						out.write('\\');
          						out.write('n');
          					}
          					else if(b[i] == '\r'){
          						out.write('\\');
          						out.write('r');
          					}
          					else if(b[i] == '\t'){
          						out.write('\\');
          						out.write('t');}
          					else if(b[i] == '\b'){
          						out.write('\\');
          						out.write('b');}
          					else if(b[i] == '\f'){
          						out.write('\\');
          						out.write('f');
          					}else{
          						out.write(b[i]);
          					}
          				}				
          			}
          			out.write(nextEnd ? recordSplit : fieldSplit);
          		}
          	}
          
          }
          


          讀回請參看另一篇:字段輸入流FieldInputStream.http://iwinyeah.javaeye.com/admin/blogs/174645
          本文的討論也很精彩,瀏覽討論>>


          JavaEye推薦




          文章來源:http://iwinyeah.javaeye.com/blog/174644

          posted on 2008-03-21 22:16 iwinyeah 閱讀(215) 評論(0)  編輯  收藏 所屬分類: Java 基礎(chǔ)知識

          主站蜘蛛池模板: 资中县| 中西区| 永平县| 鹿邑县| 衡东县| 七台河市| 垣曲县| 阳江市| 庐江县| 清镇市| 灵璧县| 化州市| 凤山市| 进贤县| 五莲县| 昭觉县| 杂多县| 方山县| 溧阳市| 华安县| 吕梁市| 女性| 玉田县| 绥滨县| 中阳县| 新民市| 扎鲁特旗| 铁岭市| 凌海市| 雅江县| 永城市| 汾西县| 尚义县| 江安县| 阜宁县| 雅江县| 堆龙德庆县| 长武县| 手游| 龙井市| 黑水县|