2009年4月15日星期三
2009年4月14日星期二
Java 理论与实践: 并发集合类(转)
2009年4月7日星期二
饮食
最佳蔬菜:番薯、芦笋、卷心菜、花椰菜、芹菜、茄子、甜菜、胡萝卜、荠菜、芥兰菜、金针菇、雪菜、大白菜。
最佳水果:木瓜、草莓、橘子、柑子、猕猴桃、芒果、杏、柿子、西瓜。
最佳肉食:鹅、鸭、鸡。
最佳食油:玉米油、米糠油、芝麻油。
最佳汤食:鸡汤。
最佳护脑食物:菠菜、韭菜、南瓜、葱、花椰菜、菜椒、豌豆、番茄、胡萝卜、小青菜、蒜苗、芹菜等蔬菜;核桃、花生、开心果、腰果、松子、杏仁、大豆等。
十大垃圾食品
油炸类食品:导致心血管疾病的元凶;含致癌物质;破坏维生素。
腌渍类食品:导致高血压,肾负担过重;导致鼻咽癌;影响粘膜系统。
加工类肉食品(肉干、肉松、香肠等):含致癌物亚硝酸盐;含损肝的防腐剂。
饼干类食品(不含低温烘烤和全麦饼干):食用香精和色素过多,损肝;严重破坏维生素。
汽水可乐类食品:含磷酸、碳酸,会带走体内的钙;含糖量过高。
方便类食品(主要指方便面和膨化食品):盐分过高,含损肝的防腐剂、香精;只有热量,没有营养。
罐头类食品(包括鱼肉类和水果类):破坏维生素,使蛋白质变性;热量过多,营养成分低。
话梅蜜饯类食品(果脯):含致癌物亚硝酸盐;盐分过高,含损肝的防腐剂、香精。
冷冻甜品类食品(冰淇淋、冰棒和雪糕):含奶油极易引起肥胖;含糖量过高,影响正餐。
烧烤类食品:含致癌物三苯四丙羁;导致蛋白质炭化变性,损肝肾。
2009年3月29日星期日
struts2中action之间传递参数(转)
首先:在action类中给rquest设置一个属性:
例如:
String catalogid = ServletActionContext.getRequest().getParameter("catalogid");
ServletActionContext.getRequest().setAttribute("catalogid", catalogid);
接着:在action配置中配置url
这样就可以在addSubCatalog里面用url传递的参数了
在这个配置文件里,多个参数的连接符使用了"&",但XML的语法规范,应该使用"&"代替"&",原理和HTML中的转义相同,开始没有注意,在struts分析配置文件时,总是报出这样的错误
2009年3月12日星期四
在批处理中等待/延迟/暂停一定的时间
1、暂停(Pause)、延迟(Delay)、等待(Wait)、睡眠(Sleep)
1)for+set+if,时间精度为0.01秒,适用平台为WinNT/2K/XP/2003。
利用for解析变量%time%并存为两个时间点%start%和%now%,再利用set /a计算两个时间点的时间差,最后用if判断时间差是否达到设定的暂停时间。
2)VBS脚本中的sleep函数,时间精度为0.001秒,使用平台为Win9x/WinNT系列。@echo off
setlocal enableextensions
echo %time%
call :ProcDelay 200
echo %time%
goto :EOF
:ProcDelay delayMSec_
setlocal enableextensions
for /f "tokens=1-4 delims=:. " %%h in ("%time%") do set start_=%%h%%i%%j%%k
:_procwaitloop
for /f "tokens=1-4 delims=:. " %%h in ("%time%") do set now_=%%h%%i%%j%%k
set /a diff_=%now_%-%start_%
if %diff_% LSS %1 goto _procwaitloop
endlocal & goto :EOF
动态创建一个调用sleep()函数的VBS脚本,然后用Windows脚本宿主的命令行版本cscript调用它。
3)ping的消息发送间隔,时间精度为1秒,使用平台为Win9x/WinNT系列。@echo off & setlocal enableextensions enabledelayedexpansion
echo WScript.Sleep 2000 > %temp%\tmp$$$.vbs
echo %time%
cscript //nologo %temp%\tmp$$$.vbs
echo %time%
for %%f in (%temp%\tmp$$$.vbs) do if exist %%f del %%f
endlocal & goto :EOF
需要你的Windows系统中正常安装了网卡的TCP/IP协议,有两种方案:
(1) 利用ping两次发送消息之间的间隔时间。ping在发送多个消息时,在得到上一次消息的回应后,它会再等待1秒的时间才发送下一次消息,而这个回应时间 因机型、系统和网络配置而不同,其中IP地址尤其关键,只有本地的回送地址 127.0.0.1 因为是立即回应所以才是相对恒定的,其他地址大多会产生显著的差异。此种方法要等待更大的时间,是指定发送的消息数为等待的时间加一,因为第一个消息是不 等待的,IP 地址必须是 127.0.0.1 。其等待2秒的程序如下:
(2) 利用ping的最大等待时间。ping向0.0.0.1发送一次“网际消息控制协议 (ICMP)”回响请求消息,因为 0.0.0.1 是个无法响应 ping 请求的IP地址,所以默认情况下,ping会等待一定的最大响应时间——4秒后便停止等待,而-w可以改变这个每发送一次消息所等待的最大响应时间。而如 果将 IP 地址改为立即响应的127.0.0.1或其他响应时间很短的IP ,那 -w 便失去了作用,因为每次发送等待时间都不会达到最大的响应时间,此时延时会缩短。此种方法要等待更大的时间,可以直接使用 -w 指定,但是需要减去 500 毫秒(原因尚未知),而且 IP 地址必须是不响应请求的地址。其等待2秒的程序如下:::根据植树原则,n后的数字为暂停秒数加一
ping -n 3 127.0.0.1>nul
4)choice的缺省选择等待功能,时间精度为1秒,适用平台为MS-DOS/Win9x/WinNT系列。ping -n 2 -w 500 0.0.0.1>nul
/t:y,2 将缺省选择字符设置为y,等待时间是2秒,/n禁止[y,n]提示出现在命令行上,“rem|”的作用是禁止choice从键盘接受按键,从而暂停不会因为按下y或者其它键而被意外终止。
5)ASCII汇编代码,延迟精度为0.001秒,适用平台为MS-DOS/Win9x/WinNT。rem|choice /t:y,2 /n >nul
德国人Herbert Kleebauer给出了一个通用方案,通过ASCII汇编器间接产生一个sleep.exe程序来实现延迟,这个程序分为DOS和Win两个模块,分别调用DOS系统中断服务和WindowsAPI。
:: Sleep.bat - Sleep/Delay/Wait n seconds
:: Herbert Kleebauer(Germany) - 2005/05/29
:: Modified by Will Sort - 2005/06/02, 07-25
@echo off
echo q | debug>nul
echo Bj@jzh`0X-`/PPPPPPa(DE(DM(DO(Dh(Ls(Lu(LX(LeZRR]EEEUYRX2Dx=>sleep.com
echo 0DxFP,0Xx.t0P,=XtGsB4o@$?PIyU WwX0GwUY Wv;ovBX2Gv0ExGIuht6>>sleep.com
echo T}{z~~@GwkBG@OEKcUt`~}@MqqBsy?seHB~_Phxr?@zAB`LrPEyoDt@Cj?>>sleep.com
echo pky_jN@QEKpEt@ij?jySjN@REKpEt@jj?jyGjN@SEKkjtlGuNw?p@pjirz>>sleep.com
echo LFvAURQ?OYLTQ@@?~QCoOL~RDU@?aU?@{QOq?@}IKuNWpe~FpeQFwH?Vkk>>sleep.com
echo _GSqoCvH{OjeOSeIQRmA@KnEFB?p??mcjNne~B?M??QhetLBgBPHexh@e=>>sleep.com
echo EsOgwTLbLK?sFU`?LDOD@@K@xO?SUudA?_FKJ@N?KD@?UA??O}HCQOQ??R>>sleep.com
echo _OQOL?CLA?CEU?_FU?UAQ?UBD?LOC?ORO?UOL?UOD?OOI?UgL?LOR@YUO?>>sleep.com
echo dsmSQswDOR[BQAQ?LUA?_L_oUNUScLOOuLOODUO?UOE@OwH?UOQ?DJTSDM>>sleep.com
echo QTqrK@kcmSULkPcLOOuLOOFUO?hwDTqOsTdbnTQrrDsdFTlnBTm`lThKcT>>sleep.com
echo @dmTkRQSoddTT~?K?OCOQp?o??Gds?wOw?PGAtaCHQvNntQv_w?A?it\EH>>sleep.com
echo {zpQpKGk?Jbs?FqokOH{T?jPvP@IQBDFAN?OHROL?Kj??pd~aN?OHROd?G>>sleep.com
echo Q??PGT~B??OC~?ipO?T?~U?p~cUo0x>>sleep.com
sleep.com>sleep.exe
echo wait %1 seconds:
sleep.exe %1000
del sleep.com
del sleep.exe
批处理延时方法小结:
1.ping
内存使用: cmd.exe 1704k@echo off
:loop
echo %time%
ping 127.1 -n 2 1>nul
echo %time%
goto loop
ping.exe 2920k
误差评定: 较高
优点: 代码构造简单
缺点: 内存占用高,延迟时间长的话误差相对较大。
2.还是ping
内存使用: cmd.exe 1700k@echo off
:loop
echo %time%
ping 1 -n 1 -w 1000 2>nul 1>nul
echo %time%
goto loop
ping.exe 2912k
误差评定: 一般
优点: 代码构造简单,时间越长误差越小,精确度较高(50ms)
缺点: 内存占用高
3.call
内存使用: cmd.exe 1744k [for语句方案]@echo off
:loop
echo %time%
call :delay 1000
echo %time%
goto loop
:delay
set /a num=num + 1
if %num% geq %1 (set num=) && goto :eof
rem for /l %%i in (1,1,%1) do echo. >nul
goto :eof
cmd.exe 1740k [set+goto方案]
误差评定: 很高 (受CPU频率影响非常大,几乎无法准确把握全局延迟时间)
优点: 精确度较高
缺点: 不适合需精确把握时间的场合
4.msg
内存使用: cmd.exe 1752k@echo off
:loop
echo %time%
msg %username% /time:20 /w "正在延时,点确定可以取消延时!"
echo %time%
goto loop
msg.exe 2620k
误差评定: 低
优点: 比较稳定,可中途取消延时,代码构造简单
缺点: 内存占用非常大,有窗口弹出(优点?缺点?)
5.vbs
内存使用: cscript.exe 4812k@echo off
echo Wscript.Sleep WScript.Arguments(0) >%tmp%\delay.vbs
:loop
echo %time%
cscript //b //nologo %tmp%\delay.vbs 2000
echo %time%
goto loop
cmd.exe 1708k
误差评定: 很低
优点: 精确度最高,使用更灵活,方便
缺点: 产生临时文件,内存占用多
从Reader向InputStream转换的类(转载)
protected Reader reader;
protected ByteArrayOutputStream byteArrayOut;
protected Writer writer;
protected char[] chars;
protected byte[] buffer;
protected int index, length;
/**
* 带Reader参数构造函数
*
* @param reader - InputStream使用的Reader
*/
public ReaderInputStream(Reader reader) {
this.reader = reader;
byteArrayOut = new ByteArrayOutputStream();
writer = new OutputStreamWriter(byteArrayOut);
chars = new char[1024];
}
/**
* 带Reader和字符编码格式参数的构造函数
*
* @param reader - InputStream使用的Reader
* @param encoding - InputStream使用的字符编码格式.
* @throws 如果字符编码格式不支持,则抛UnsupportedEncodingException异常
*/
public ReaderInputStream(Reader reader, String encoding)
throws UnsupportedEncodingException {
this.reader = reader;
byteArrayOut = new ByteArrayOutputStream();
writer = new OutputStreamWriter(byteArrayOut, encoding);
chars = new char[1024];
}
/**
* @see java.io.InputStream#read()
*/
public int read() throws IOException {
if (index >= length)
fillBuffer();
if (index >= length)
return -1;
return 0xff & buffer[index++];
}
protected void fillBuffer() throws IOException {
if (length < 0)
return;
int numChars = reader.read(chars);
if (numChars < 0) {
length = -1;
} else {
byteArrayOut.reset();
writer.write(chars, 0, numChars);
writer.flush();
buffer = byteArrayOut.toByteArray();
length = buffer.length;
index = 0;
}
}
/**
* @see java.io.InputStream#read(byte[], int, int)
*/
public int read(byte[] data, int off, int len) throws IOException {
if (index >= length)
fillBuffer();
if (index >= length)
return -1;
int amount = Math.min(len, length - index);
System.arraycopy(buffer, index, data, off, amount);
index += amount;
return amount;
}
/**
* @see java.io.InputStream#available()
*/
public int available() throws IOException {
return (index < length) ? length - index :
((length >= 0) && reader.ready()) ? 1 : 0;
}
/**
* @see java.io.InputStream#close()
*/
public void close() throws IOException {
reader.close();
}
}
