<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    J2ME 技術(shù)的學(xué)習(xí)與實(shí)踐者

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


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

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

    /**
     * --------------------------------------------------
     * 字段輸入流
     * --------------------------------------------------
     * 從DataInputStream繼承
     * 主要增加了從文本格式輸入流中讀入數(shù)據(jù)字段的能力
     * --------------------------------------------------
     * 
     * @author iwinyeah 李永超
     * @version 1.0.0
     * */
    
    import java.io.DataInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    
    public class FieldInputStream extends DataInputStream {
    	public final static int BIN_MODE = 0;
    
    	public final static int TXT_MODE = 1;
    
    	int mode;
    
    	public FieldInputStream(InputStream in, int mode) {
    		super(in);
    		this.mode = mode;
    	}
    
    	public boolean getBoolean() throws IOException {
    		if (mode == 0) {
    			return readBoolean();
    		} else {
    			if ("1".equals(next())) {
    				return true;
    			}
    			return false;
    		}
    	}
    
    	public byte getByte() throws IOException {
    		if (mode == 0) {
    			return readByte();
    		} else {
    			return (byte) Integer.parseInt(next());
    		}
    	}
    
    	public short getShort() throws IOException {
    		if (mode == 0) {
    			return readShort();
    		} else {
    			return (short) Integer.parseInt(next());
    		}
    	}
    
    	public int getInt() throws IOException {
    		if (mode == 0) {
    			return readInt();
    		} else {
    			return Integer.parseInt(next());
    		}
    	}
    
    	public long getLong() throws IOException {
    		if (mode == 0) {
    			return readLong();
    		} else {
    			return Long.parseLong(next());
    		}
    	}
    
    	public String getString() throws IOException {
    		if (mode == 0) {
    			if (read() == 0) {
    				return null;
    			} else {
    				return readUTF();
    			}
    		} else {
    			return next();
    		}
    	}
    
    	// 取下一標(biāo)識(shí)符
    	private byte[] buffer = new byte[255];
    
    	private int length = 0;
    
    	private boolean eos = false;
    
    	private final static int INITIAL = 0;
    
    	private final static int ESCAPE = 1;
    
    	private final static int COMMENT_START = 2;
    
    	private final static int LINE_COMMENT = 3;
    
    	private final static String WHITESPACE = "\n\r\t";
    
    	public String next() throws IOException {
    		length = 0;
    		int c = in.read();
    		int status = INITIAL;
    		READWHILE: while (c != -1) { // 一直讀到文件尾
    
    			switch (status) {
    			case INITIAL:
    				if (c == '\n' || c == '\t') { // 如果是分隔符
    					break READWHILE;
    				} else if (c == '\\') {
    					status = ESCAPE; // 設(shè)轉(zhuǎn)義字符標(biāo)志
    				} else if (c == '/') {
    					status = COMMENT_START; // 設(shè)注釋標(biāo)志
    				} else {
    					if (WHITESPACE.indexOf(c) < 0) {
    						append(c);
    					}
    				}
    				break;
    
    			case ESCAPE: // 處理轉(zhuǎn)義字符
    				switch (c) {
    				case 'n':
    					append('\n');
    					break;
    
    				case 'r':
    					append('\r');
    					break;
    
    				case 't':
    					append('\t');
    					break;
    
    				case 'b':
    					append('\b');
    					break;
    
    				case 'f':
    					append('\f');
    					break;
    
    				default:
    					append(c);
    					break;
    				}
    				status = INITIAL; // 設(shè)正常情況標(biāo)志
    				break;
    
    			case COMMENT_START: // 處理注釋
    				if (c == '/') {
    					status = LINE_COMMENT; // 是行式注釋
    				} else {
    					status = INITIAL;
    					// 如果都不是則把注釋起始符和剛讀入的字符都加入到標(biāo)識(shí)符中
    					append('/');
    					append(c);
    				}
    				break;
    
    			case LINE_COMMENT:
    				if (c == '\n') {
    					status = INITIAL; // 如果當(dāng)前為行注釋狀態(tài)則要一直讀到行尾才恢復(fù)正常情況標(biāo)志
    					break READWHILE;
    				}
    				break;
    			}
    			c = in.read(); // 讀入下一字符
    		}
    
    		if (c == -1) {
    			eos = true;
    		}
    
    		// 如果讀到文件尾時(shí),標(biāo)識(shí)符長(zhǎng)度大于零,則返回標(biāo)識(shí)符,否則返回NULL值
    		if (length <= 0) {
    			return null;
    		} else {
    			return new String(buffer, 0, length, "UTF-8");
    		}
    	}
    
    	// 將讀入的字符加入緩沖區(qū)
    	private void append(int c) {
    		// 緩沖區(qū)不足時(shí)自動(dòng)擴(kuò)展
    		if (length >= buffer.length) {
    			byte[] xBuffer = new byte[buffer.length + 16];
    			System.arraycopy(buffer, 0, xBuffer, 0, buffer.length);
    			buffer = null;
    			buffer = xBuffer;
    		}
    
    		buffer[length++] = (byte) c;
    	}
    
    	public boolean eos() {
    		return eos;
    	}
    }
    

    請(qǐng)參看我的另一篇文章:字段輸出流FieldOutputStreamhttp://iwinyeah.javaeye.com/admin/blogs/174644
    本文的討論也很精彩,瀏覽討論>>


    JavaEye推薦




    文章來(lái)源:http://iwinyeah.javaeye.com/blog/174645

    posted on 2008-03-21 22:19 iwinyeah 閱讀(179) 評(píng)論(0)  編輯  收藏 所屬分類: Java 基礎(chǔ)知識(shí)

    主站蜘蛛池模板: 免费无遮挡无码视频在线观看| 一级特级女人18毛片免费视频| 亚洲国产成人久久一区久久| a在线观看免费网址大全| 亚洲一区二区三区不卡在线播放 | 免费无码AV片在线观看软件| 九九九精品视频免费| 亚洲嫩草影院久久精品| 日韩免费观看一级毛片看看| A级毛片高清免费视频在线播放| 亚洲毛片基地4455ww| 久久久久亚洲av毛片大| 在线观看特色大片免费视频| 中国内地毛片免费高清| 亚洲人成人网站18禁| 久久久久久亚洲av成人无码国产| 日韩视频免费在线| 1000部禁片黄的免费看| h在线看免费视频网站男男| 久久久久精品国产亚洲AV无码| 免费无毒a网站在线观看| 亚洲综合久久综合激情久久| 四虎免费永久在线播放| 亚洲一区在线免费观看| AAAAA级少妇高潮大片免费看| 亚洲精品无码中文久久字幕| 亚洲国产综合精品中文第一区| 亚洲国产一级在线观看| 亚洲av无码专区国产不乱码| 亚洲韩国—中文字幕| 亚洲国产精品无码久久久久久曰| 一个人看的www在线观看免费| 日本免费久久久久久久网站| 免费无码午夜福利片69| 亚洲日韩国产AV无码无码精品| 亚洲一区二区中文| 国产国拍亚洲精品mv在线观看 | 国产一区二区免费视频| 人成电影网在线观看免费| 亚洲字幕AV一区二区三区四区| 亚洲精品影院久久久久久|