`
log_cd
  • 浏览: 1098504 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Random/Timer/Java Disabuse(解惑)/StAX

阅读更多

一、Random

1、创建Random类型的对象:

 

Random random = new Random();//默认构造方法

Random random = new Random(10010010);//指定种子数字

 

2、生成随机数字:

 

生成随机整数:

int k = random.nextInt();

 

生成随机长整数:

long l = random.nextLong();

 

3、生成指定范围的数字:

 

例如生成0-10之间的随机数字:

 int k = random.nextInt();

int j = Math.abs(k % 10);

 

//直接方式:rand.nextInt(range);

int i =random.nextInt(10);

 

获得10-20之间的随机数字:

int k = random.nextInt();

int j = Math.abs(k % 10) + 10;

 

int i = (int)(Math.random()*1000)

 

random对象的nextInt(),nextInt(int n)说明:

 

int nextInt()
  返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。  有正有负。

int nextInt(int n)
  返回一个伪随机数,它是从此随机数生成器的序列中取出的、在 0(包括)和指定值(不包括)之间均匀分布的 int值。

 

4、next(int bits)

 

        next(n)产生2的n次方之内的随机数,next(32)产生2的32次方之内的随机数,就相当于nextInt()了。

 

5、setSeed(long seed)

 

       setSeed(long seed) 用于设定随机数的种子,即这里的seed。随机数种子的用处是:一般说来,这里的Random类产生随机数是伪随机数,是系统采用特定的算法生成出来的,方法是new两个Random类random1和random2。各自调用nextInt方法10次,我们可以看出,虽然各自产生的是随机数,但是两个Random类产生的随机数都是一样的。这就使得随机数存在着漏洞。

 

二、java disabuse

 

	/***********双括弧初始化:内层的花括号就是匿名类的初始化子句************/
	@SuppressWarnings("unchecked")
	private static Map map = new HashMap() {{   
	    put("id", "20090501");   
	    put("name", "name1");
	    put("age","20");
	}};  

	private static final Set<String> set = new HashSet<String>() {{   
	       add("lucy");   
	       add("lily");   
	       add("frank");   
	       add("bruce");   
	}};  
	
	public static void printSet(Set set){
		Iterator it = set.iterator();
		while(it.hasNext()){
			System.out.println(it.next());
		}
	}
	
	public static void printMap(Map map) { 
        for (Object key : map.keySet()) {   
            System.out.println(key + ":" + map.get(key));   
        }  
	}
	
	public static void printSelf() {
		// 正则表达式“.”可以匹配任何单个的字符,要转义
		System.out.println(JavaDisabuse.class.getName().replaceAll("\\.", "/")
				+ ".class");
		// java.util.regex.Pattern.quote。它接受一个字符串作为参数,并可以添加必
		// 需的转义字符,它将返回一个正则表达式字符串
		System.out.println(JavaDisabuse.class.getName().replaceAll(
				Pattern.quote("."), "/")+ ".class");
		
		//java.util.regex.Matcher.quoteReplacement,它将字
		//符串转换成相应的替代字符串。
		System.out.println(JavaDisabuse.class.getName().replaceAll("\\.",
				Matcher.quoteReplacement(File.separator)) + ".class");
		
		System.out.println(JavaDisabuse.class.getName().
				replace('.', File.separatorChar) + ".class");
	}

	/** ***********提防溢出*************** */
	public static void longDivision() {
		final long MICROS_PER_DAY = 24 * 60 * 60 * 1000 * 1000;// 乘完后(已溢出)转型
		final long MICROS_PER_DAY_L = 24L * 60 * 60 * 1000 * 1000;
		final long MILLIS_PER_DAY = 24 * 60 * 60 * 1000;

		System.out.println(MICROS_PER_DAY / MILLIS_PER_DAY);// 5
		System.out.println(MICROS_PER_DAY_L / MILLIS_PER_DAY);// 1000
	}

	/** ***********执行精确小数运算********* */
	public static BigDecimal subtract(String arg0, String arg1) {
		// 问题在于1.1 这个数字不能被精确表示成为一个double,因此它被表示成为最
		// 接近它的double值。
		System.out.println(2.00 - 1.10);// 二进制浮点数的double运算:0.8999999999999999
		return new BigDecimal(arg0).subtract(new BigDecimal(arg1));// 0.90
	}

	/** *******求奇数(莫用i%2==1,负数失效)********* */
	public static boolean isOdd(int i) {
		return i % 2 != 0;
	}

	public static boolean isOdd1(int i) {
		return (i & 1) != 0;
	}

 三、Timer和TimerTask

public class JavaTimer {

	/**
	 * 延迟执行任务
	 * @param task
	 * @param delay
	*/
	public void delayDoTask(TimerTask task, long delay){
		Timer t = new Timer();
		t.schedule(task, delay);
	}
	
	/**
	 * 间隔执行任务
	 * @param task
	 * @param delay
	*/
	public void internalDoTask(TimerTask task, long delay, long period){
		Timer t = new Timer();
		t.schedule(task, delay, period);
	}
	
	public class HomeWork extends TimerTask{
		String id = "ID_"+Math.round(Math.random()*100000);
		int times = 0; 
		public void run() {
			System.out.println(id + " do homework " + (++times) + " times!");
			if(times > 5){
				this.cancel();//取消任务
				System.exit(0);
			}
		}
	}

	public static void main(String args[]){
		JavaTimer timer = new JavaTimer();
		timer.delayDoTask(timer.new HomeWork(), 1*1000);
		timer.internalDoTask(timer.new HomeWork(), 500, 1*1000);
	}
	
}

 四、关于StAX

        从一开始,Java API for XML Processing (JAXP) 就提供了两种方法来处理 XML:文档对象模型(DOM)方法是用标准的对象模型表示 XML 文档;Simple API for XML (SAX) 方法使用应用程序提供的事件处理程序来处理 XML。JSR-173 提出了一种面向流的新方法:Streaming API for XML (StAX)。

        StAX 实际上包括两套处理 XML 的 API,分别提供了不同程度的抽象。基于指针的 API 允许应用程序把 XML 作为一个标记(或事件)流来处理;应用程序可以检查解析器的状态,获得解析的上一个标记的信息,然后再处理下一个标记,依此类推。这是一种低层 API,尽管效率高,但是没有提供底层 XML 结构的抽象。较为高级的基于迭代器的 API 允许应用程序把 XML 作为一系列事件对象来处理,每个对象和应用程序交换 XML 结构的一部分。应用程序只需要确定解析事件的类型,将其转换成对应的具体类型,然后利用其方法获得属于该事件的信息。

(1)StAXReader

public class StAXReader {

	/**
	 * 使用基于底层指针的 API: XMLStreamReader解析输入流
	 * @param fileName
	 */
	public static void parseByXMLStreamReader(String fileName) throws Exception{
		XMLStreamReader reader = null;
		PrintStream out = System.out; 
		try{
			XMLInputFactory factory = XMLInputFactory.newInstance();
			reader = factory.createXMLStreamReader(new FileReader(fileName));
			
			int event = reader.getEventType();
			while (true) {
				switch (event) {
					case XMLStreamConstants.START_DOCUMENT://一个文档的开始
						out.println("Start Document.");
						break;
						
					case XMLStreamConstants.START_ELEMENT://一个元素的开始
						out.println("Start Element: " + reader.getName().getLocalPart());
						for(int i = 0, n = reader.getAttributeCount(); i < n; ++i)
							out.println("Attribute: " + reader.getAttributeName(i) 
									+ "=" + reader.getAttributeValue(i));
						break;
						
					case XMLStreamConstants.CHARACTERS://字符可以是文本,或是一个空格
					case XMLStreamConstants.SPACE://可忽略的空格
						if (reader.isWhiteSpace())
							break;
						
						int start = reader.getTextStart();
						int length = reader.getTextLength();
						String text =
						new String(reader.getTextCharacters(), start, length);
						
						out.println("Text: " + text);
						break;
					
					case XMLStreamConstants.COMMENT ://一个注释
					case XMLStreamConstants.PROCESSING_INSTRUCTION ://处理指令
						out.println("Text: " + reader.getText());
						break;
						
					case XMLStreamConstants.END_ELEMENT://结束元素
						out.println("End Element:" + reader.getName().getLocalPart());
						break;
						
					case XMLStreamConstants.END_DOCUMENT://结束文档
						out.println("End Document.");
						break;
				}
			 
				if (!reader.hasNext())
					break;

				event = reader.next();
			 }
		}catch(Exception e){
			e.printStackTrace();
			throw new Exception("解析XML文件时出错!", e);
		}finally{
			if(null != reader){
				reader.close();
			}
		}
	}
	
	/**
	 * 使用迭代器风格的 API: XMLEventReader解析输入流
	 * @param fileName
	 */
	public static void parseByXMLEventReader(String fileName) throws Exception{
		XMLEventReader reader = null;
		PrintStream out = System.out; 
		try{
			XMLInputFactory factory = XMLInputFactory.newInstance();
			reader = factory.createXMLEventReader(new FileReader(fileName));
			
			while(reader.hasNext()){
				XMLEvent evt = reader.nextEvent();
				switch(evt.getEventType()){
					case XMLEvent.START_DOCUMENT:
						String version = ((StartDocument) evt).getVersion();
						String encoding = ((StartDocument) evt).getCharacterEncodingScheme();
						boolean isStandAlone = ((StartDocument) evt).isStandalone();
						out.println("Start Document.");
						if(null != version) out.println("version: " + version);
						if(null != encoding) out.println("encoding: "+ encoding);
						out.println("isStandAlone: "+isStandAlone);
						break;
					case XMLEvent.START_ELEMENT:
						QName qname = ((StartElement) evt).getName();
						String localName = qname.getLocalPart();
						out.println("Start Element: " + localName);
						Iterator<?> it = ((StartElement) evt).getAttributes();
						while (it.hasNext()) {
							Attribute attr = (Attribute) it.next();
							QName attrName = attr.getName();
							String attrValue = attr.getValue();
							out.println("Attribute: "+ attrName.getLocalPart() +" = "+attrValue);
						}
						break;
					case XMLEvent.END_ELEMENT:
						QName qname_end = ((EndElement) evt).getName();
						out.println("End Element: " + qname_end.getLocalPart());
						break;
					case XMLEvent.CHARACTERS:
						String text = ((Characters) evt).getData();
						if(null != text && !text.replaceAll("\\s+", "").equals("")){
							out.println("Text: " + text);
						}
						break;
					case XMLEvent.COMMENT:
						out.println("Comment: " + ((Comment) evt).getText());
						break;
					case XMLEvent.END_DOCUMENT:
						out.println("End Document.");
						break;
				}
			}
		}catch(Exception e){
			e.printStackTrace();
			throw new Exception("解析XML文件时出错!", e);
		}finally{
			if(null != reader){
				reader.close();
			}
		}
	}
	
	/**
	 * 读指定节点下的值
	 * 如:<properties>
	 *   <property name="port" description="服务器所使用的端口">
	 *      <field>80</field>
	 *   </property>
	 *   </properties>
	 * @param fileName
	 * @param nodeName
	 * @throws Exception
	 */
	public static void readXMLNodeProperty(String fileName, String nodeName) throws Exception{
		XMLEventReader reader = null;
		PrintStream out = System.out; 
		try{
			XMLInputFactory factory = XMLInputFactory.newInstance();
			reader = factory.createXMLEventReader(new FileReader(fileName));
			
			while(reader.hasNext()){
				XMLEvent evt = reader.nextEvent();
				if(evt.getEventType() == XMLEvent.START_ELEMENT){
					StartElement el = (StartElement)evt;
					Attribute attr = el.getAttributeByName(new QName("name"));//具有name属性的节点
					String startTag = el.getName().getLocalPart();//节点标签
					
					if(null != attr && attr.getValue().equals(nodeName)){//根据name的值确定是否是想找的节点
						
						while(reader.hasNext()){//循环其后节点
							evt = reader.nextEvent();
							if(evt.getEventType() == XMLEvent.END_ELEMENT){
								if(((EndElement)evt).getName().getLocalPart().equals(startTag)){//节点结束标签
									break;
								}
							}
							if(evt.getEventType() == XMLEvent.CHARACTERS){//是文本节点,包括了空白符
								String text = ((Characters) evt).getData();
								if(!text.replaceAll("\\s+", "").equals("")){
									out.println(nodeName + " = " + text);
									break;
								}
							}
						}
						
					}
					
				}
			}
		}catch(Exception e){
			e.printStackTrace();
			throw new Exception("读取XML过程中出错!", e);
		}finally{
			if(null != reader){
				reader.close();
			}
		}
	}
	
}

 

(2).StAXWriter

public class StAXWriter {

	/**
	 * 基于Cursor
	 * @throws XMLStreamException
	 */
	public static void writeByXMLStreamWriter() throws XMLStreamException{
		final String XHTML_NS = "http://www.w3.org/1999/xhtml";//Namespace
		XMLOutputFactory f = XMLOutputFactory.newInstance();
		XMLStreamWriter w = f.createXMLStreamWriter(System.out);
		try {
			w.writeStartDocument("GBK", "1.0");//Encoding And Version
			w.writeCharacters("\n");
			
			w.writeDTD("<!DOCTYPE html " +
			          "PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" " +
			          "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">");
			w.writeCharacters("\n");
			
			w.writeComment(" This is a comment! ");//注释
			w.writeCharacters("\n");
			
			w.writeStartElement("html");
			w.writeDefaultNamespace(XHTML_NS);//在当前元素上声明默认名称空间
			w.writeAttribute("lang", "en");
			w.writeCharacters("\n");
			
			w.writeStartElement(XHTML_NS, "head");//名称空间URI 和本地名称
			w.writeCharacters("\n");
			
			w.writeStartElement(XHTML_NS, "title");
			w.writeCharacters("Test");
			w.writeEndElement();//end <title>
			
			w.writeCharacters("\n");
			w.writeEndElement();//end <head>
			w.writeCharacters("\n");
			
			w.writeStartElement(XHTML_NS, "body");
			w.writeCharacters("This is a test.");
			w.writeCData("This is a CData content!");//可以将文本包装在 CDATA 块中
			w.writeEndElement();//end <body>
			
			w.writeCharacters("\n");
			w.writeEndElement();//end <html>
			w.writeEndDocument();
		}finally{
			w.flush();//促使编写器将任何缓存的数据写入底层输出
		    w.close();//关闭编写器对象:关闭方法只释放编写器需要的资源,并不关闭底层的输出。
		}		
	}
	
	/**
	 * 基于Event
	 * @throws XMLStreamException
	 */
	public static void writeByXMLEventWriter() throws XMLStreamException{
		final String XHTML_NS = "http://www.w3.org/1999/xhtml";
		final QName HTML_TAG = new QName(XHTML_NS, "html");
		final QName HEAD_TAG = new QName(XHTML_NS, "head");
		final QName TITLE_TAG = new QName(XHTML_NS, "title");
		final QName BODY_TAG = new QName(XHTML_NS, "body");
		
		XMLOutputFactory f = XMLOutputFactory.newInstance();
		XMLEventWriter w = f.createXMLEventWriter(System.out);
		XMLEventFactory ef = XMLEventFactory.newInstance();
		try {
			/*
			 * add(XMLEventReader) 是一个很方便的方法,用它可以写出从读取器获得的全部事件。
			 * 使用这个方法,应用程序可以将整个 XML 流的内容有效地输送到另一个 XML 流,而且内容保持不变。
			 * add(XMLEvent) 写出从读取器获得的事件
			 */
			w.add(ef.createStartDocument());
			w.add(ef.createIgnorableSpace("\n"));
			w.add(ef.createDTD("<!DOCTYPE html " +
			          "PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" " +
			          "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">"));
			w.add(ef.createIgnorableSpace("\n"));
			
			w.add(ef.createStartElement(HTML_TAG, null, null));
			w.add(ef.createNamespace(XHTML_NS));
			w.add(ef.createAttribute("lang", "en"));
			w.add(ef.createIgnorableSpace("\n"));
			
			w.add(ef.createStartElement(HEAD_TAG, null, null));
			w.add(ef.createIgnorableSpace("\n"));
			
			w.add(ef.createStartElement(TITLE_TAG, null, null));
			w.add(ef.createCharacters("Test"));
			w.add(ef.createEndElement(TITLE_TAG, null));
			
			w.add(ef.createEndElement(HEAD_TAG, null));
			w.add(ef.createIgnorableSpace("\n"));
			
			w.add(ef.createStartElement(BODY_TAG, null, null));
			w.add(ef.createCharacters("This is a test."));
			w.add(ef.createEndElement(BODY_TAG, null));
			w.add(ef.createIgnorableSpace("\n"));
			
			w.add(ef.createEndElement(HTML_TAG, null));
			w.add(ef.createEndDocument());
		} finally {
			w.flush();
			w.close();
		}
	}
	
}

 

	/**
	 * 直接将Java Bean 转化成XML
	 * @param obj
	 */
	public static void convertObjectToXMLByXMLEncoder(Object obj){
		try{
			java.beans.XMLEncoder encoder = new XMLEncoder(System.out);
			encoder.writeObject(obj); 
			encoder.close(); 
		}catch(Exception e){
			e.printStackTrace();
		}
	}

 附:xstream实现java对象与XML互转

地址:http://xstream.codehaus.org/index.html

分享到:
评论

相关推荐

    Timer-java.rar_java timer_timer_timer java

    在Java编程语言中,`Timer`类是Java.util包下的一个关键组件,它主要用于调度周期性的任务执行。这个`Timer`类提供了定时器的功能,能够按照预设的时间间隔执行任务,比如更新UI、执行定时检查等。在描述中提到的是...

    timer定时器(java)

    ### Timer定时器(Java) #### 知识点概述 在Java中,`Timer`类是`java.util`包的一部分,用于调度线程执行任务。它主要用于处理那些需要定期执行的任务,比如更新用户界面、发送电子邮件通知等场景。通过`Timer`...

    java_Timer_thread.rar_java thread timer_java timer_java 定时器_java

    Java中的定时器(Timer)是Java.util包下用于执行定期任务的一个类,它与线程(Thread)紧密关联,能够帮助开发者实现定时执行特定任务的需求。这个机制在多线程编程(multithreading)中非常有用,特别是在需要定期...

    java timer定时器详解(附详细代码)

    Java Timer定时器详解 Java Timer定时器是Java语言中的一种常用的定时器机制,它可以帮助开发者实现一些需要在特定时间或特定间隔执行的任务。Java Timer定时器主要是通过java.util.Timer和java.util.TimerTask两个...

    java定时任务调度之Timer 简单示例

    `Timer`类是Java中用于实现定时任务调度的一个基础工具,它位于`java.util`包中。在本文中,我们将深入探讨`Timer`类的基本使用和示例,帮助你理解如何在Java程序中实现简单的定时任务。 首先,`Timer`类提供了计划...

    pb多timer事件实例.zip

    4. **区分TIMER**:在Timer事件处理程序中,通过TIMER对象的Handle属性或自定义的ID属性来判断是哪个TIMER触发了事件,然后执行相应的操作。 例如,如果窗口中有两个TIMER(TIMER1和TIMER2),并且都绑定了Timer...

    java 定时器(Timer)

    Java定时器(Timer)是Java Swing库中的一个类,它提供了调度任务在未来某个时间执行的能力。这个类主要用于在GUI应用程序中实现定时触发某些操作,比如更新界面、执行动画或者执行周期性的后台任务。Timer类结合了...

    java定时器(timer类使用详解)

    Java定时器,也被称为`Timer`类,是Java标准库中的一个强大工具,它允许开发者在指定的时间间隔执行任务,从而实现定时操作。这个类在`java.util`包中定义,是实现定时任务调度的核心。在本文中,我们将深入探讨`...

    Java计时器Timer和TimerTask用法总结

    Java 计时器 Timer 和 TimerTask 用法总结 Java 中的计时器(Timer)和 TimerTask 是一种常用的延迟执行技术,用于实现延迟执行某个任务或事件。下面将详细介绍 Timer 和 TimerTask 的用法和实现原理。 Timer ...

    java.util.timer实现的简单定时任务

    Java.util.Timer类是Java标准库提供的一种简单但功能有限的定时任务执行机制。它允许开发者在指定的时间间隔或特定时间点执行任务,非常适合处理一次性或周期性的后台操作。本篇文章将深入探讨如何使用Timer和...

    java5定时器java Timer

    Java5中的`java.util.Timer`类是一个非常实用的工具,用于调度周期性的任务执行。它在多线程环境中提供了一种高效且灵活的方式来安排任务在未来某个时间点或定期执行。这个类是Java早期版本中对定时任务管理的一个...

    Timer:最小JavaScript库,可在浏览器中创建和管理计时器

    使用CommonJS require语句const Timer = require ( '@georapbox/timer' ) . default ;作为全球的老派浏览器&lt; script src =" https://unpkg.com/@georapbox/timer " &gt; &lt;/ script &gt;原料药 .time() ⇒ ...

    sample-Timer.rar_Timer ja_mftimer_timer java

    在Java ME(Micro Edition)平台中,`Timer`类是一个重要的工具,用于执行定期的、重复的任务。在游戏开发和需要定时事务处理的场景中,`Timer`的使用显得尤为重要。`sample-Timer.rar`提供的示例代码展示了如何在...

    JavaTimer和TimerTask实例教程Java开发

    在Java编程语言中,`Timer`和`TimerTask`是两个重要的类,它们用于调度周期性的任务执行。这两个类属于`java.util`包,提供了在后台线程中延迟执行任务或者定期执行任务的能力,这对于创建定时任务或者实现定时器...

    Timer累计计时器,利用系统时间计时 含代码注释

    例如,在Java中,我们可以使用java.util.Timer类;在C#中,可以使用System.Timers.Timer类;在Python中,可以使用threading模块的Timer类。 二、累计计时的原理 累计计时是指从开始到结束,连续计算经过的时间。在...

    Java里timer执行定时任务

    ### Java里timer执行定时任务 #### 一、延时执行 在Java中,`java.util.Timer` 类提供了创建和管理定时任务的功能。如果需要在特定时间之后执行某个任务,可以利用 `Timer` 类的 `schedule()` 方法。此方法接受一...

    Java并发Timer源码分析

    Java并发Timer源码分析 Java并发编程是Java编程中一个非常重要的方面,java.util.Timer是Java中的一个基本组件,用于实现延时和周期性任务的执行。但是,Timer存在一些缺陷,如创建唯一的线程来执行所有Timer任务,...

    java定时器timer制作

    Java中定时器(Timer)主要用于执行周期性的任务。通过`java.util.Timer`类,可以创建一个定时器对象,该对象负责调度事件。定时器可以用来执行两种类型的定时任务:一次性任务和周期性任务。 #### 一次性任务 一次...

    Timer java定时器

    Timer java定时器

    java中timer用法

    不过,标准的调度类 Timer 和 TimerTask 没有足够的灵活性,无法支持通常需要的计划任务类型。在本文中,Java 开发人员 Tom White 向您展示了如何构建一个简单通用的计划框架,以用于执行任意复杂的计划任务。

Global site tag (gtag.js) - Google Analytics