網(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)備份和恢復(文本格式)功能了.
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