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

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

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

    java中inputstream的有關類的設計模式-the decorator pattern

    java中inputstream的有關類的設計模式-the decorator pattern

    inputstream中比較重要的decorator----BufferedInputStream
    它的構造函數為BufferedInputStream(InputStream in)
    BufferedInputStream(InputStream in, int size)


    可以裝飾繼承了inputsream類的類

    自己完成的新的inputstream
    public class LowerCaseInputStream extends FilterInputStream {
    public LowerCaseInputStream(InputStream in) {
    super(in);
    }
    public int read() throws IOException {
    int c = super.read();
    return (c == -1 ? c : Character.toLowerCase((char)c));
    }
    public int read(byte[] b, int offset, int len) throws IOException {
    int result = super.read(b, offset, len);
    for (int i = offset; i < offset+result; i++) {
    b[i] = (byte)Character.toLowerCase((char)b[i]);
    }
    return result;
    }
    }


    FiterInputStream 便是一種特殊的類,他滿足裝飾器(decorator)的條件,
    1。必須繼承需要decorator的類:InputStream
    2。在此類中必須包含需要decorator的類的實例,這樣的話此類就擁有decorator的類的功能還能擴展其他功能。
    FiterInputStream 的原代碼

    /*
     * @(#)FilterInputStream.java 1.28 03/12/19
     *
     * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
     * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
     */

    package java.io;

    /**
     * A <code>FilterInputStream</code> contains
     * some other input stream, which it uses as
     * its  basic source of data, possibly transforming
     * the data along the way or providing  additional
     * functionality. The class <code>FilterInputStream</code>
     * itself simply overrides all  methods of
     * <code>InputStream</code> with versions that
     * pass all requests to the contained  input
     * stream. Subclasses of <code>FilterInputStream</code>
     * may further override some of  these methods
     * and may also provide additional methods
     * and fields.
     *
     * @author  Jonathan Payne
     * @version 1.28, 12/19/03
     * @since   JDK1.0
     */
    public
    class FilterInputStream extends InputStream {
        /**
         * The input stream to be filtered.
         */
        protected volatile InputStream in;   
    /**
         * Creates a <code>FilterInputStream</code>
         * by assigning the  argument <code>in</code>
         * to the field <code>this.in</code> so as
         * to remember it for later use.
         *
         * @param   in   the underlying input stream, or <code>null</code> if
         *          this instance is to be created without an underlying stream.
         */
        protected FilterInputStream(InputStream in) {
     this.in = in;
        }

        /**
         * Reads the next byte of data from this input stream. The value
         * byte is returned as an <code>int</code> in the range
         * <code>0</code> to <code>255</code>. If no byte is available
         * because the end of the stream has been reached, the value
         * <code>-1</code> is returned. This method blocks until input data
         * is available, the end of the stream is detected, or an exception
         * is thrown.
         * <p>
         * This method
         * simply performs <code>in.read()</code> and returns the result.
         *
         * @return     the next byte of data, or <code>-1</code> if the end of the
         *             stream is reached.
         * @exception  IOException  if an I/O error occurs.
         * @see        java.io.FilterInputStream#in
         */
        public int read() throws IOException {
     return in.read();
        }

        /**
         * Reads up to <code>byte.length</code> bytes of data from this
         * input stream into an array of bytes. This method blocks until some
         * input is available.
         * <p>
         * This method simply performs the call
         * <code>read(b, 0, b.length)</code> and returns
         * the  result. It is important that it does
         * <i>not</i> do <code>in.read(b)</code> instead;
         * certain subclasses of  <code>FilterInputStream</code>
         * depend on the implementation strategy actually
         * used.
         *
         * @param      b   the buffer into which the data is read.
         * @return     the total number of bytes read into the buffer, or
         *             <code>-1</code> if there is no more data because the end of
         *             the stream has been reached.
         * @exception  IOException  if an I/O error occurs.
         * @see        java.io.FilterInputStream#read(byte[], int, int)
         */
        public int read(byte b[]) throws IOException {
     return read(b, 0, b.length);
        }

        /**
         * Reads up to <code>len</code> bytes of data from this input stream
         * into an array of bytes. This method blocks until some input is
         * available.
         * <p>
         * This method simply performs <code>in.read(b, off, len)</code>
         * and returns the result.
         *
         * @param      b     the buffer into which the data is read.
         * @param      off   the start offset of the data.
         * @param      len   the maximum number of bytes read.
         * @return     the total number of bytes read into the buffer, or
         *             <code>-1</code> if there is no more data because the end of
         *             the stream has been reached.
         * @exception  IOException  if an I/O error occurs.
         * @see        java.io.FilterInputStream#in
         */
        public int read(byte b[], int off, int len) throws IOException {
     return in.read(b, off, len);
        }

        /**
         * Skips over and discards <code>n</code> bytes of data from the
         * input stream. The <code>skip</code> method may, for a variety of
         * reasons, end up skipping over some smaller number of bytes,
         * possibly <code>0</code>. The actual number of bytes skipped is
         * returned.
         * <p>
         * This method
         * simply performs <code>in.skip(n)</code>.
         *
         * @param      n   the number of bytes to be skipped.
         * @return     the actual number of bytes skipped.
         * @exception  IOException  if an I/O error occurs.
         */
        public long skip(long n) throws IOException {
     return in.skip(n);
        }

        /**
         * Returns the number of bytes that can be read from this input
         * stream without blocking.
         * <p>
         * This method
         * simply performs <code>in.available()</code> and
         * returns the result.
         *
         * @return     the number of bytes that can be read from the input stream
         *             without blocking.
         * @exception  IOException  if an I/O error occurs.
         * @see        java.io.FilterInputStream#in
         */
        public int available() throws IOException {
     return in.available();
        }

        /**
         * Closes this input stream and releases any system resources
         * associated with the stream.
         * This
         * method simply performs <code>in.close()</code>.
         *
         * @exception  IOException  if an I/O error occurs.
         * @see        java.io.FilterInputStream#in
         */
        public void close() throws IOException {
     in.close();
        }

        /**
         * Marks the current position in this input stream. A subsequent
         * call to the <code>reset</code> method repositions this stream at
         * the last marked position so that subsequent reads re-read the same bytes.
         * <p>
         * The <code>readlimit</code> argument tells this input stream to
         * allow that many bytes to be read before the mark position gets
         * invalidated.
         * <p>
         * This method simply performs <code>in.mark(readlimit)</code>.
         *
         * @param   readlimit   the maximum limit of bytes that can be read before
         *                      the mark position becomes invalid.
         * @see     java.io.FilterInputStream#in
         * @see     java.io.FilterInputStream#reset()
         */
        public synchronized void mark(int readlimit) {
     in.mark(readlimit);
        }

        /**
         * Repositions this stream to the position at the time the
         * <code>mark</code> method was last called on this input stream.
         * <p>
         * This method
         * simply performs <code>in.reset()</code>.
         * <p>
         * Stream marks are intended to be used in
         * situations where you need to read ahead a little to see what's in
         * the stream. Often this is most easily done by invoking some
         * general parser. If the stream is of the type handled by the
         * parse, it just chugs along happily. If the stream is not of
         * that type, the parser should toss an exception when it fails.
         * If this happens within readlimit bytes, it allows the outer
         * code to reset the stream and try another parser.
         *
         * @exception  IOException  if the stream has not been marked or if the
         *               mark has been invalidated.
         * @see        java.io.FilterInputStream#in
         * @see        java.io.FilterInputStream#mark(int)
         */
        public synchronized void reset() throws IOException {
     in.reset();
        }

        /**
         * Tests if this input stream supports the <code>mark</code>
         * and <code>reset</code> methods.
         * This method
         * simply performs <code>in.markSupported()</code>.
         *
         * @return  <code>true</code> if this stream type supports the
         *          <code>mark</code> and <code>reset</code> method;
         *          <code>false</code> otherwise.
         * @see     java.io.FilterInputStream#in
         * @see     java.io.InputStream#mark(int)
         * @see     java.io.InputStream#reset()
         */
        public boolean markSupported() {
     return in.markSupported();
        }
    }

    posted on 2007-09-12 12:02 劉錚 閱讀(796) 評論(0)  編輯  收藏 所屬分類: JAVA General

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    統計

    留言簿(1)

    文章分類(141)

    文章檔案(147)

    搜索

    最新評論

    主站蜘蛛池模板: 亚洲日韩中文字幕无码一区| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 国产aa免费视频| 黄 色一级 成 人网站免费| 精品亚洲麻豆1区2区3区| 爽爽日本在线视频免费| 中国一级特黄的片子免费| 亚洲国产成人精品青青草原| 免费又黄又爽又猛的毛片| 久久精品成人免费观看| 亚洲另类无码专区首页| 亚洲国产精品va在线播放| 日韩精品免费电影| 日本免费大黄在线观看| 我要看WWW免费看插插视频| 七次郎成人免费线路视频| 亚洲另类春色校园小说| 亚洲国产综合精品一区在线播放| 性xxxx视频免费播放直播| 国产精品亚洲专一区二区三区| 亚洲人成伊人成综合网久久久| 午夜dj在线观看免费视频| 免费无码一区二区三区| 无码AV动漫精品一区二区免费| 亚洲人和日本人jizz| 亚洲av最新在线网址| 亚洲国产一成久久精品国产成人综合| 57PAO成人国产永久免费视频 | 女人被弄到高潮的免费视频| 久久精品成人免费观看| 日韩a毛片免费观看| 亚洲男人天堂2018av| 亚洲AV午夜成人片| 亚洲av再在线观看| 妞干网免费观看视频| 黄色永久免费网站| 免费国产成人午夜在线观看| 日韩精品视频在线观看免费| 亚洲国产成人AV在线播放| 亚洲天堂一区二区三区| 亚洲国产高清在线|