<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)

    搜索

    最新評論

    主站蜘蛛池模板: 亚洲精品无码你懂的网站| 成年人免费视频观看| 亚洲人成网站色在线入口 | 亚洲av无码一区二区三区不卡| 黄页免费视频播放在线播放| 日本19禁啪啪无遮挡免费动图| 亚洲日产乱码一二三区别| 最近2019中文字幕mv免费看| 久久精品亚洲AV久久久无码| 成人免费视频试看120秒| 亚洲国产AV无码一区二区三区| 国产精品国产自线拍免费软件| 日日摸日日碰夜夜爽亚洲| 免费无遮挡无码永久在线观看视频| 亚洲a∨无码精品色午夜| 国产男女猛烈无遮挡免费视频| 国产精品亚洲精品日韩动图| 亚洲Aⅴ无码一区二区二三区软件| 成在线人直播免费视频| 亚洲人成在线播放网站| 一级成人a毛片免费播放| 91亚洲精品自在在线观看| 一二三四免费观看在线视频中文版 | 国产高清不卡免费视频| 久久亚洲精品成人无码网站| 成人午夜免费福利视频| 亚洲日韩亚洲另类激情文学| 亚洲熟伦熟女新五十路熟妇| 国产成人AV片无码免费| 亚洲综合精品伊人久久| 一区二区三区亚洲视频| 久久九九AV免费精品| 亚洲一卡2卡3卡4卡5卡6卡| 亚洲一区二区三区无码影院| 免费无码VA一区二区三区| 亚洲欧美aⅴ在线资源| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 大地资源在线资源免费观看 | 亚洲v国产v天堂a无码久久| 国产精成人品日日拍夜夜免费 | 男人免费视频一区二区在线观看 |