⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bytearrayhelper.java

📁 杰表服务器 部分源码 杰创网络报表(简称“杰表”)是一款国产的网络报表开发工具
💻 JAVA
字号:
/*
 * Created on 2004-10-15
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package servlet;

import com.jatools.core.ZByteArrayRegister;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;


/**
 * @author java
 *
 * 临时字节数组注册器
 *
 * 临时字节数组注册器用于管理在报表导出过程中生成的临时文件数据,如html方式导出时,
 * 图形数据可以以字节数组的形式,保存在服务器端的内存中.
 *
 * 注意,临时字节数组在session结束后,自动从内存中删除.
 *
 *
 */
public class ByteArrayHelper implements ZByteArrayRegister, HttpSessionBindingListener {
    //保存所有被注册的临时字节数组
    static Map cache = new HashMap();

    //最近一次保存的字节数组id
    static int lastid;

    //本注册项相关的session
    private HttpSession session;

    //本注册项字节数组
    byte[] bytes;

    /**
     * 创建一个字节数组注册项.
     *
     * @param session 请求会话
     *
     */
    public ByteArrayHelper(HttpSession session) {
        this.session = session;
    }

    /**
     * 取得注册器中的某一项注册项.
     *
     * @param id 注册项id
     *
     * @return 找到的注册项
     */
    public static ByteArrayHelper getByteArrayHelper(String id) {
        return (ByteArrayHelper) cache.get(id);
    }

    /**
     * 会话监听器方法
     *
     * @param httpSessionBindingEvent DOCUMENT ME!
     */
    public void valueBound(HttpSessionBindingEvent httpSessionBindingEvent) {
    }

    /**
     *
     * 会话结束时,在注册器中删除本注册项,以利内存回收
     *
     * @param httpSessionBindingEvent DOCUMENT ME!
     */
    public void valueUnbound(HttpSessionBindingEvent httpSessionBindingEvent) {
        cache.values().contains(this);

        Iterator it = cache.keySet().iterator();

        while (it.hasNext()) {
            Object key = it.next();

            if (cache.get(key) == this) {
                cache.remove(key);

                break;
            }
        }
    }

    /**
     * @return 取得本注册项的字节数据.
     */
    public byte[] getBytes() {
        return bytes;
    }

    /**
     * 设置字节数组并注册本注册项,被导出工具类调用.
     *
     * @param bytes 注册项字节数据
     *
     * @return 引用该注册项数组的url
     */
    public synchronized String registerStream(byte[] bytes) {
        this.bytes = bytes;

        // 注册项id 加1,使其唯一
        lastid++;

        // 注册到注册器
        cache.put(lastid + "", this);

        // 引用注册项数组的url,请参考 ByteArrayInterpretor.java
        String url = "bai?id=" + lastid;

        // 注册到session,使得注册项在session周期后,自动删除
        session.setAttribute(url, this);

        // 返回数组引用
        return url;
    }


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -