亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? chunkedinputstream.java

?? 這是<java高級實(shí)用教程>的電子版書,內(nèi)容深入淺出啊,有實(shí)例有解析,不錯的
?? JAVA
字號:
// ChunkedInputStream - an InputStream that implements HTTP/1.1 chunking
//
// Copyright (C) 1996,1998 by Jef Poskanzer <jef@acme.com>. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
// 1. Redistributions of source code must retain the above copyright
//    notice, this list of conditions and the following disclaimer.
// 2. Redistributions in binary form must reproduce the above copyright
//    notice, this list of conditions and the following disclaimer in the
//    documentation and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
// OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
// SUCH DAMAGE.
//
// Visit the ACME Labs Java page for up-to-date versions of this and other
// fine Java utilities: http://www.acme.com/java/

package Acme.Serve.servlet.http;

import java.io.*;
import java.util.*;
import Acme.Serve.servlet.*;

/// An InputStream that implements HTTP/1.1 chunking.
// <P>
// This class lets a Servlet read its request data as an HTTP/1.1 chunked
// stream.  Chunked streams are a way to send arbitrary-length data without
// having to know beforehand how much you're going to send.  They are
// introduced by a "Transfer-Encoding: chunked" header, so if such a header
// appears in an HTTP request you should use this class to read any data.
// <P>
// Sample usage:
// <BLOCKQUOTE><PRE><CODE>
// InputStream in = req.getInputStream();
// if ( "chunked".equals( req.getHeader( "Transfer-Encoding" ) ) )
//     in = new ChunkedInputStream( in );
// </CODE></PRE></BLOCKQUOTE>
// <P>
// Because it would be impolite to make the authors of every Servlet include
// the above code, this is general done at the server level so that it
// happens automatically.  Servlet authors will generally not create
// ChunkedInputStreams.  This is in contrast with ChunkedOutputStream,
// which Servlets have to call themselves if they want to use it.
// <P>
// <A HREF="/resources/classes/Acme/Serve/servlet/http/ChunkedInputStream.java">Fetch the software.</A><BR>
// <A HREF="/resources/classes/Acme.tar.gz">Fetch the entire Acme package.</A>

public class ChunkedInputStream extends FilterInputStream
    {

    private DataInputStream din;
    private int contentLength;

    /// Make a ChunkedInputStream.
    public ChunkedInputStream( InputStream in )
	{
	super( new DataInputStream( in ) );
	din = (DataInputStream) this.in;
	contentLength = 0;
	}


    private byte[] b1 = new byte[1];

    /// The FilterInputStream implementation of the single-byte read()
    // method just reads directly from the underlying stream.  We want
    // to go through our own read-block method, so we have to override.
    // Seems like FilterInputStream really ought to do this itself.
    public int read() throws IOException
	{
	if ( read( b1, 0, 1 ) == -1 )
	    return -1;
	return b1[0];
	}


    private int chunkCount = 0;

    /// Reads into an array of bytes.
    // @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 actual number of bytes read, or -1 on EOF
    // @exception IOException if an I/O error has occurred
    public int read( byte b[], int off, int len ) throws IOException
	{
	if ( chunkCount == 0 )
	    {
	    startChunk();
	    if ( chunkCount == 0 )
		return -1;
	    }
	int toRead = Math.min( chunkCount, len );
	int r = din.read( b, off, toRead );
	if ( r != -1 )
	    chunkCount -= r;
	return r;
	}


    /// Reads the start of a chunk.
    private void startChunk() throws IOException
	{
	String line = din.readLine();
	try
	    {
	    chunkCount = Integer.parseInt( line, 16 );
	    }
	catch ( NumberFormatException e )
	    {
	    throw new IOException( "malformed chunk" );
	    }
	contentLength += chunkCount;
	if ( chunkCount == 0 )
	    readFooters();
	}


    private Vector footerNames = null;
    private Vector footerValues = null;

    /// Reads any footers.
    private void readFooters() throws IOException
	{
	footerNames = new Vector();
	footerValues = new Vector();
	String line;
	while ( true )
	    {
	    line = din.readLine();
	    if ( line.length() == 0 )
		break;
	    int colon = line.indexOf( ':' );
	    if ( colon != -1 )
		{
		String name = line.substring( 0, colon ).toLowerCase();
		String value = line.substring( colon + 1 ).trim();
		footerNames.addElement( name.toLowerCase() );
		footerValues.addElement( value );
		}
	    }
	}


    /// Returns the value of a footer field, or null if not known.
    // Footers come at the end of a chunked stream, so trying to
    // retrieve them before the stream has given an EOF will return
    // only nulls.
    // @param name the footer field name
    public String getFooter( String name )
	{
	if ( ! isDone() )
	    return null;
	int i = footerNames.indexOf( name.toLowerCase() );
	if ( i == -1 )
	    return null;
	return (String) footerValues.elementAt( i );
	}


    /// Returns an Enumeration of the footer names.
    public Enumeration getFooters()
	{
	if ( ! isDone() )
	    return null;
	return footerNames.elements();
	}


    /// Returns the size of the request entity data, or -1 if not known.
    public int getContentLength()
	{
	if ( ! isDone() )
	    return -1;
	return contentLength;
	}


    /// Tells whether the stream has gotten to its end yet.  Remembering
    // whether you've gotten an EOF works fine too, but this is a convenient
    // predicate.  java.io.InputStream should probably have its own isEof()
    // predicate.
    public boolean isDone()
	{
	return footerNames != null;
	}

    }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
最近中文字幕一区二区三区| 日韩经典一区二区| 国内久久婷婷综合| 91精品国产色综合久久ai换脸| 亚洲国产欧美另类丝袜| 欧美日韩一区二区在线观看视频| 亚洲成av人片在线观看| 欧美久久婷婷综合色| 久久99久国产精品黄毛片色诱| 精品88久久久久88久久久| 国产一区中文字幕| 国产精品美日韩| 91麻豆国产精品久久| 亚洲最新视频在线观看| 欧美高清你懂得| 国模少妇一区二区三区| 亚洲欧美一区二区视频| 欧美日韩视频在线一区二区| 精品在线免费视频| 亚洲国产精品二十页| 91国偷自产一区二区开放时间| 日韩av在线免费观看不卡| 久久久久九九视频| 日本韩国一区二区| 久久精品av麻豆的观看方式| 国产精品免费看片| 69堂成人精品免费视频| 极品少妇xxxx偷拍精品少妇| 日韩美女视频19| 日韩一级大片在线观看| av一二三不卡影片| 秋霞成人午夜伦在线观看| 欧美韩日一区二区三区四区| 欧美日韩国产中文| 国产成人亚洲综合a∨婷婷图片 | 亚洲欧美经典视频| 日韩视频国产视频| 91啪九色porn原创视频在线观看| 日韩高清不卡一区二区三区| 中文字幕日韩一区| 日韩情涩欧美日韩视频| 色婷婷精品大在线视频| 国产在线播放一区| 亚洲va欧美va国产va天堂影院| 日本一区二区三区dvd视频在线 | 日韩免费在线观看| 欧美性猛交一区二区三区精品 | 91麻豆文化传媒在线观看| 日本欧美大码aⅴ在线播放| 中文字幕亚洲欧美在线不卡| 日韩视频免费观看高清完整版在线观看 | 亚洲免费观看高清在线观看| 精品成人佐山爱一区二区| 欧美午夜寂寞影院| 9i看片成人免费高清| 国产一区二区三区黄视频| 亚洲bt欧美bt精品| 日韩美女视频19| 中文字幕 久热精品 视频在线| 日韩欧美国产麻豆| 欧美日韩电影在线| 在线观看日韩电影| 色综合一区二区| 不卡一二三区首页| 国产精品主播直播| 精品一区二区日韩| 美女视频网站久久| 男女性色大片免费观看一区二区 | 国产成人精品影院| 久久精品国产精品青草| 婷婷久久综合九色综合伊人色| 亚洲精品中文在线影院| 最新不卡av在线| 国产精品初高中害羞小美女文| 国产欧美综合色| 国产日产欧产精品推荐色| 久久久久亚洲蜜桃| xvideos.蜜桃一区二区| 久久综合九色综合欧美亚洲| 久久婷婷成人综合色| 亚洲精品一区二区三区99| 日韩视频一区二区三区在线播放 | 国产欧美精品一区| 久久久久久久综合色一本| 2024国产精品| 欧美韩日一区二区三区四区| 国产精品久久久久影视| 亚洲天堂福利av| 亚洲精品国产一区二区精华液| 一区二区三区中文字幕精品精品| 一区二区三区国产精品| 亚洲成人av在线电影| 日韩国产高清在线| 美女视频第一区二区三区免费观看网站 | 美腿丝袜在线亚洲一区| 黄色资源网久久资源365| 精品在线一区二区三区| 成人永久免费视频| 色综合久久中文综合久久牛| 欧美探花视频资源| 日韩欧美电影一二三| 国产亚洲欧美色| 亚洲欧洲性图库| 亚洲第一久久影院| 韩国成人在线视频| 在线区一区二视频| 国产三级一区二区三区| va亚洲va日韩不卡在线观看| 91亚洲大成网污www| 欧美亚洲高清一区二区三区不卡| 91.com视频| 久久精品免视看| 欧美日韩亚洲综合一区| 精品国产污网站| 亚洲丝袜美腿综合| 日本成人在线不卡视频| 成人性生交大片免费| 欧洲精品一区二区| 精品国产乱码久久久久久1区2区| 欧美韩国日本一区| 欧美aa在线视频| 一道本成人在线| 精品国产人成亚洲区| 一区二区三区在线免费观看| 麻豆久久久久久久| 91日韩在线专区| 久久综合九色综合97婷婷女人| 一级做a爱片久久| 国产成人av影院| 欧美高清一级片在线| 中文字幕在线不卡国产视频| 麻豆精品在线看| 色婷婷av一区二区三区软件 | 欧美色网一区二区| 国产日本欧美一区二区| 婷婷成人激情在线网| av毛片久久久久**hd| 欧美不卡在线视频| 亚洲高清免费视频| 成人涩涩免费视频| 精品国产乱码久久久久久蜜臀| 亚洲精品伦理在线| 不卡一区二区中文字幕| 精品国产不卡一区二区三区| 午夜激情久久久| av中文字幕亚洲| 国产午夜亚洲精品羞羞网站| 青青草原综合久久大伊人精品| 91福利视频网站| 椎名由奈av一区二区三区| 成人高清视频在线观看| 日韩写真欧美这视频| 亚洲午夜免费福利视频| 色综合婷婷久久| ...av二区三区久久精品| 粉嫩欧美一区二区三区高清影视| 18成人在线观看| 国产美女精品人人做人人爽 | 国产精品99久久久久久似苏梦涵| 制服丝袜中文字幕亚洲| 亚洲已满18点击进入久久| 91视频观看视频| 亚洲精品v日韩精品| 91丨porny丨在线| 中文字幕一区二区三区不卡在线 | 91精品国产综合久久国产大片| 亚洲尤物视频在线| 色哟哟精品一区| 亚洲乱码中文字幕| 在线看不卡av| 日韩理论片网站| 91久久精品一区二区| 国产精品不卡在线| 91在线播放网址| 亚洲色图视频网| 在线免费不卡电影| 亚洲第一电影网| 91麻豆精品国产自产在线观看一区| 天天影视涩香欲综合网| 91精品国产综合久久精品图片 | 高清在线不卡av| 中文字幕亚洲不卡| 一本久久a久久免费精品不卡| 亚洲蜜臀av乱码久久精品蜜桃| 在线观看视频一区二区欧美日韩| 午夜久久久久久久久| 日韩欧美国产不卡| 国产成人精品亚洲午夜麻豆| 国产精品国产馆在线真实露脸| 91视频免费看| 午夜精品123| 久久免费精品国产久精品久久久久| 国产精品12区| 亚洲色图清纯唯美| 欧美福利视频一区| 久久精品国产一区二区三| 久久精品日韩一区二区三区| 91麻豆免费观看| 久久电影网电视剧免费观看| 欧美国产日本视频|