<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 劉錚 閱讀(800) 評論(0)  編輯  收藏 所屬分類: JAVA General

    <2025年7月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    導航

    統計

    留言簿(1)

    文章分類(141)

    文章檔案(147)

    搜索

    最新評論

    主站蜘蛛池模板: 亚洲人成网亚洲欧洲无码| 国产亚洲精品AA片在线观看不加载| 久久精品国产亚洲AV大全| 两个人的视频www免费| 在线亚洲午夜理论AV大片| yellow视频免费看| 国产亚洲av片在线观看18女人| 国产精品玖玖美女张开腿让男人桶爽免费看| 黄网址在线永久免费观看| 亚洲gay片在线gv网站| 免费一级毛片在级播放| 亚洲日韩在线观看免费视频| 久久久久亚洲AV无码专区网站 | 免费日韩在线视频| 香蕉视频免费在线| MM131亚洲国产美女久久| 国产精品九九久久免费视频| 亚洲三级电影网址| 福利免费观看午夜体检区| 色欲aⅴ亚洲情无码AV| 国产精品亚洲二区在线观看| 久久亚洲免费视频| 国产成人亚洲综合网站不卡| 免费在线观看的黄色网址| a级成人毛片免费图片| 亚洲蜜芽在线精品一区| 日韩免费无砖专区2020狼| av网站免费线看| 亚洲成在人线电影天堂色| 成在线人永久免费视频播放| 久久国产一片免费观看| 久久久久亚洲AV无码观看| 日韩伦理片电影在线免费观看| 久久一区二区三区免费| 亚洲另类图片另类电影| 亚洲中文无韩国r级电影| 精品熟女少妇a∨免费久久| 国产精品亚洲色图| 中文字幕在线观看亚洲| 亚洲国产精品不卡毛片a在线| 日韩内射激情视频在线播放免费|