[導(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ǔ)知識