data.java

来自「一个用java编写的服务器,对于学习网络编程的人来说是个很好的例子」· Java 代码 · 共 95 行

JAVA
95
字号
/*
 * This file is part of the QuickServer library 
 * Copyright (C) 2003-2005 QuickServer.org
 *
 * Use, modification, copying and distribution of this software is subject to
 * the terms and conditions of the GNU Lesser General Public License. 
 * You should have received a copy of the GNU LGP License along with this 
 * library; if not, you can download a copy from <http://www.quickserver.org/>.
 *
 * For questions, suggestions, bug-reports, enhancement-requests etc.
 * visit http://www.quickserver.org
 *
 */

package xmladder;

import org.apache.commons.digester.*;
import java.util.logging.*;
import java.io.*;


import org.quickserver.net.server.ClientData;
import org.quickserver.util.pool.PoolableObject;
import org.apache.commons.pool.BasePoolableObjectFactory; 
import org.apache.commons.pool.PoolableObjectFactory; 

import java.net.*;
import java.io.*;
import java.util.logging.*;

public class Data implements ClientData, PoolableObject {
	private static Logger logger = Logger.getLogger(Data.class.getName());

	private StringBuffer xmlDump = new StringBuffer();

	public void addXmlPart(String data) throws Exception {
		xmlDump.append(data);
	}

	public synchronized String getNextXML() {
		int i1 = xmlDump.indexOf("<");
		int i2 = xmlDump.indexOf(">",i1);
		if(i1!=-1 && i2!=-1) {
			String tag = xmlDump.substring(i1+1, i2);
			int j = -1;
			String xmlEndTag = null;
			if(tag.trim().charAt(tag.trim().length()-1)=='/') {
				j = i2;
				xmlEndTag = ">";
			} else {
				xmlEndTag = "</" + tag + ">";
				j = xmlDump.indexOf(xmlEndTag, i2);
			}
			if(j!=-1) {
				String data = xmlDump.substring(i1, j+xmlEndTag.length());
				xmlDump.delete(i1, j+xmlEndTag.length());
				return data;
			}
		} 
		return null;
	}

	//-- PoolableObject
	public void clean() {
		xmlDump.setLength(0);
	}

	public boolean isPoolable() {
		return true;
	}

	public PoolableObjectFactory getPoolableObjectFactory() {
		return  new BasePoolableObjectFactory() {
			public Object makeObject() { 
				return new Data();
			} 
			public void passivateObject(Object obj) {
				Data ed = (Data)obj;
				ed.clean();
			} 
			public void destroyObject(Object obj) {
				if(obj==null) return;
				passivateObject(obj);
				obj = null;
			}
			public boolean validateObject(Object obj) {
				if(obj==null) 
					return false;
				else
					return true;
			}
		};
	}
}

⌨️ 快捷键说明

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