07_HttpEntity类型有哪些

BasicHttpEntity

 代表底层流的基本实体。通常是在http报文中获取的实体。他只有一个空参的构造方法。

刚创建时没有内容,长度为负值。需要通过两个方法,把值赋进去。

/**
	 * BasicHttpEntity
	 * @throws IOException
	 */
	public static void testBasicHttpEntity() throws IOException{
		InputStream is = null;
		//BasicHttpEntity这类就是一个输入流的内容包装类,包装内容的相关的编码格式,长度等
		BasicHttpEntity entity = new BasicHttpEntity();
		//设置内容
		entity.setContent(is);
		//设置长度
		entity.setContentLength(is.available());
		//没搞懂chunked这个属性啥意思
		entity.setChunked(false);
	}


ByteArrayEntity

 是自我包含的,可重复获得使用的,从指定的字节数组中取出内容的实体。

字节数组是这个实体的构造方法的参数

/**
	 * ByteArrayEntity
	 * @throws IOException
	 */
	public static void testByteArrayEntity() throws IOException{
		ByteArrayEntity entity = new ByteArrayEntity("内容".getBytes());
		ByteArrayInputStream is = (ByteArrayInputStream) entity.getContent();
		//上面这行代码返回的其实是一个ByteArrayInputStream对象
		/*public InputStream getContent() {
	        return new ByteArrayInputStream(this.b, this.off, this.len);
	    }*/
	}


StringEntity

是自我包含的可重复的实体。通过String创建的实体

有两个构造方法,一个是自Sring为参数的构造方法,一个是以String和字符编码为参数的构造方法。

/**
	 * StringEntity
	 * @throws IOException
	 */
	public static void testStringEntity() throws IOException{
		 StringBuilder sb = new StringBuilder();
		 //获取系统的信息集合,这个集合是不可以修改的
		 Map<String, String> nev = System.getenv();
		 for(Entry<String, String> entry : nev.entrySet()){
			 sb.append(entry.getKey()).append("=")
			 .append(entry.getValue()).append("\n");
		 }
		 String content = sb.toString();
		 System.out.println(content);
		 //创建只带字符串参数的
		 StringEntity entity = new StringEntity(content);
		 //创建带字符创参数和字符编码的
		 StringEntity entity2 = new StringEntity(content, "UTF-8");
		 
	}


InputreamEntity

是流式不可以重复的实体。构造方法是InputStream 和内容长度,内容长度是输入流的长度

/**
	 * InputStreamEntity
	 * @throws IOException
	 */
	public static void testInputStreamEntity() throws IOException{
		InputStream is = null;
		//InputStreamEntity严格是对内容和长度相匹配的。用法和BasicHttpEntity类似
		InputStreamEntity entity = new InputStreamEntity(is, is.available());
	}


FileEntity

自我包含式,可以重复的实体。参数传入文件和文件类型。


/**
	 * FileEntity
	 * @throws IOException
	 */
	public static void testFileEntity() throws IOException{
		 FileEntity entity = new FileEntity(new File(""), ContentType.APPLICATION_FORM_URLENCODED);
		 FileEntity entity2 = new FileEntity(new File(""), "application/java-achive");
		 
	}


EntityTemplete

从ContentProducer接口接受内容的实体。

在ContentProducer的实现类中写入想要写入的内容。

/**
	 * EntityTemplate
	 * @throws IOException
	 */
	public static void testEntityTemplate() throws IOException{
		ContentProducer producer = new ContentProducer() {
			
			@Override
			public void writeTo(OutputStream outstream) throws IOException {
				outstream.write("这是什么东东》。".getBytes());
			}
		};
		
		EntityTemplate entity = new EntityTemplate(producer);
		entity.writeTo(System.out);
	}



HttpEntityWrapper

这个是创建被包装实体的基类,有被包装实体的引用。

相当于实体的代理类,被包装实体是他的一个属性。

下面是这个类的源码:

/*
 * ====================================================================
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * ====================================================================
 *
 * This software consists of voluntary contributions made by many
 * individuals on behalf of the Apache Software Foundation.  For more
 * information on the Apache Software Foundation, please see
 * <http://www.apache.org/>.
 *
 */

package org.apache.http.entity;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.annotation.NotThreadSafe;

/**
 * Base class for wrapping entities.
 * Keeps a {@link #wrappedEntity wrappedEntity} and delegates all
 * calls to it. Implementations of wrapping entities can derive
 * from this class and need to override only those methods that
 * should not be delegated to the wrapped entity.
 *
 * @since 4.0
 */
@NotThreadSafe
public class HttpEntityWrapper implements HttpEntity {

    /** The wrapped entity. */
    protected HttpEntity wrappedEntity;

    /**
     * Creates a new entity wrapper.
     *
     * @param wrapped   the entity to wrap, not null
     * @throws IllegalArgumentException if wrapped is null
     */
    public HttpEntityWrapper(HttpEntity wrapped) {
        super();

        if (wrapped == null) {
            throw new IllegalArgumentException
                ("wrapped entity must not be null");
        }
        wrappedEntity = wrapped;

    } // constructor


    public boolean isRepeatable() {
        return wrappedEntity.isRepeatable();
    }

    public boolean isChunked() {
        return wrappedEntity.isChunked();
    }

    public long getContentLength() {
        return wrappedEntity.getContentLength();
    }

    public Header getContentType() {
        return wrappedEntity.getContentType();
    }

    public Header getContentEncoding() {
        return wrappedEntity.getContentEncoding();
    }

    public InputStream getContent()
        throws IOException {
        return wrappedEntity.getContent();
    }

    public void writeTo(OutputStream outstream)
        throws IOException {
        wrappedEntity.writeTo(outstream);
    }

    public boolean isStreaming() {
        return wrappedEntity.isStreaming();
    }

    /**
     * @deprecated (4.1) Either use {@link #getContent()} and call {@link java.io.InputStream#close()} on that;
     * otherwise call {@link #writeTo(OutputStream)} which is required to free the resources.
     */
    @Deprecated
    public void consumeContent() throws IOException {
        wrappedEntity.consumeContent();
    }

}


BufferedHttpEntity

是HttpEntityWarpper的子类,可以把不可以重复的实体,实现成可以重复的实体。

它从提供的实体中读取内容,缓存到内容中。

源码如下:

/*
 * ====================================================================
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * ====================================================================
 *
 * This software consists of voluntary contributions made by many
 * individuals on behalf of the Apache Software Foundation.  For more
 * information on the Apache Software Foundation, please see
 * <http://www.apache.org/>.
 *
 */

package org.apache.http.entity;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.http.HttpEntity;
import org.apache.http.annotation.NotThreadSafe;
import org.apache.http.util.EntityUtils;

/**
 * A wrapping entity that buffers it content if necessary.
 * The buffered entity is always repeatable.
 * If the wrapped entity is repeatable itself, calls are passed through.
 * If the wrapped entity is not repeatable, the content is read into a
 * buffer once and provided from there as often as required.
 *
 * @since 4.0
 */
@NotThreadSafe
public class BufferedHttpEntity extends HttpEntityWrapper {

    private final byte[] buffer;

    /**
     * Creates a new buffered entity wrapper.
     *
     * @param entity   the entity to wrap, not null
     * @throws IllegalArgumentException if wrapped is null
     */
    public BufferedHttpEntity(final HttpEntity entity) throws IOException {
        super(entity);
        if (!entity.isRepeatable() || entity.getContentLength() < 0) {
            this.buffer = EntityUtils.toByteArray(entity);
        } else {
            this.buffer = null;
        }
    }

    @Override
    public long getContentLength() {
        if (this.buffer != null) {
            return this.buffer.length;
        } else {
            return wrappedEntity.getContentLength();
        }
    }

    @Override
    public InputStream getContent() throws IOException {
        if (this.buffer != null) {
            return new ByteArrayInputStream(this.buffer);
        } else {
            return wrappedEntity.getContent();
        }
    }

    /**
     * Tells that this entity does not have to be chunked.
     *
     * @return  <code>false</code>
     */
    @Override
    public boolean isChunked() {
        return (buffer == null) && wrappedEntity.isChunked();
    }

    /**
     * Tells that this entity is repeatable.
     *
     * @return  <code>true</code>
     */
    @Override
    public boolean isRepeatable() {
        return true;
    }


    @Override
    public void writeTo(final OutputStream outstream) throws IOException {
        if (outstream == null) {
            throw new IllegalArgumentException("Output stream may not be null");
        }
        if (this.buffer != null) {
            outstream.write(this.buffer);
        } else {
            wrappedEntity.writeTo(outstream);
        }
    }


    // non-javadoc, see interface HttpEntity
    @Override
    public boolean isStreaming() {
        return (buffer == null) && wrappedEntity.isStreaming();
    }

} // class BufferedHttpEntity


 


  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值