载入中,请稍候……

Java程序中调用sun包会影响可移植性

Admin 于 2008-10-26 17:15:48 发表Java

J2SE中的类大致可以划分为以下的各个包:
java.*,javax.*,org.*,sun.*
除了“sun”包,其它各个包都是Java平台的标准实现,并且今后也将被继续支持。一般说来,“sun”之类的包并不包含在Java平台的标准中,它与操作系统相关,在不同的操作系统(如Solaris,Windows,Linux,Mac等等)中的实现也各不相同,并且可能随着J2SE版本不定期变化。因此,直接调用“sun”包的程序代码并不是100%的Java实现。

也就是说:
“java.*”包,“javax.*”包,“org.*”包是作为J2SE的 API公开接口的一部分,如果程序直接调用这些包中的API,那么程序是可以运行在所有Java平台上,而与操作系统无关;但“sun.*”包并不是 API公开接口的一部分,调用“sun”包的程序并不能确保工作在所有Java平台上,事实上,这样的程序并不能工作在今后的Java平台上。

正因为如此,“sun.*”包中的类并没有提供API文档。平台无关性是Java语言最大的优势之一,此外,SUN和Java许可证确保维持了今后API的向上兼容性(以后修改的那些有严重bug的代码除外)。这种兼容性意味着你写好的程序编译成的cl ass文件仍然可以工作在将来的版本当中。

每家实现Java平台的厂商都可以使用他们自己的方式。“sun.*”包中的类是 SUN 对Java平台的实现方式,它们工作在Java 2 SDK的下层,这些类未必被其它Java 平台开发商支持。比如你的Java程序如果调用了一个名为“sun.package.Foo”的类,将有可能产生 “ClassNotFoundError”的错误,同时你也将失去利用Java的一个主要的优点。

从技术上讲,并不能防止你的程序调用“sun.*”包中的类。在版本的变迁当中,这些类可能会被删除或转移到其它包路径下,而且它的接口(包括名称、标签等)也很有可能发生变化,(根据SUN的观点,我们应当能够通过对“sun.*”包的修改来提高Java平台的性能。)在这种情况下,即便你希望程序仅仅运行在SUN的实现平台下,你仍将承受新的版本给你的系统带来破坏的风险。总之,编写依赖于“sun.*”包的Java程序是不安全的,他们将变得无法移植,无法被很好地支持。

被阅591次, 0票可移植 发表评论

UTF8ToBytes

Admin 于 2008-10-22 01:04:28 发表C/C++

  1. byte src[] = {(byte)228,(byte)184,(byte)173,(byte)229,(byte)155,(byte)189,0};  //中国 
  2.  
  3. int ucCharLen = MultiByteToWideChar(CP_UTF8,0,(LPCSTR)src,-1,NULL,0); 
  4. LPWSTR wbuf = new WCHAR[ucCharLen]; 
  5. memset(wbuf,0,sizeof(wbuf)); 
  6. MultiByteToWideChar(CP_UTF8,0,(LPCSTR)src,-1,wbuf,ucCharLen); 
  7.  
  8. byte* buf = NULL; 
  9.  
  10. int byteLength = WideCharToMultiByte(CP_UTF8,0,(LPCWSTR)wbuf,-1,NULL,0,NULL,NULL); 
  11. buf = new byte[byteLength]; 
  12. memset(buf,0,sizeof(buf)); 
  13. WideCharToMultiByte(CP_UTF8,0,(LPCWSTR)wbuf,-1,(LPSTR)buf,byteLength,NULL,NULL); 
  14.  
  15. delete buf; 
  16. delete wbuf; 
被阅714次, 0票 发表评论

C++实现目录文件的非递归遍历并用伪函数来进行文件操作

Admin 于 2008-10-22 00:53:21 发表C/C++

在用进行文件操作时,少不了和目录的递归打交道,但我一般认为.递归算法比较慢.如果可以采用非递归实现,就不要递归.

在非递归算法中,一般我们用一个队列来保存相应的数据.一会列出代码.
还有一个问题,我们递归目录,无非是想对文件进行操作,或者想得到文件的一个列表. 这时,你可以会采用回调函数. 但在我看来,还有更好的实现文案,让"回调"函数是一个对象,就既可以实现回调,也可以保存数据,这就是C++语言的仿函数.今天,我们就用仿函数来对指 定的文件进行操作,例如修改文件,或者得到文件列表.
先看一下递归函数的实现:

被阅623次, 0票 发表评论

在JPG图片中追加、分离其它文件数据的脚本

Admin 于 2008-10-22 00:50:51 发表JavaScript

用法:
1、追加文件:jpgexe.js jpg1.jpg + exe1.exe jpgout.jpg
程序exe1已经到图片jpgout.jpg 中了。
2.、分离:jpgexe.js jpgout.jpg  exe2.exe
程序exe2已经分离出来了。
脚本:

被阅576次, 0票 发表评论

MFC中对音量的控制:增大,减小,静音

Admin 于 2008-10-22 00:44:54 发表C/C++

  1. //增大音量: 
  2. keybd_event(VK_VOLUME_UP,MapVirtualKey(VK_VOLUME_UP,0),KEYEVENTF_EXTENDEDKEY,0); 
  3. keybd_event(VK_VOLUME_UP,MapVirtualKey(VK_VOLUME_UP,0),KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,0); 
  4.  
  5. //减小音量: 
  6. keybd_event(VK_VOLUME_DOWN,MapVirtualKey(VK_VOLUME_DOWN,0),KEYEVENTF_EXTENDEDKEY,0); 
  7. keybd_event(VK_VOLUME_DOWN,MapVirtualKey(VK_VOLUME_DOWN,0),KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,0); 
  8. //静音: 
  9. keybd_event(VK_VOLUME_MUTE,MapVirtualKey(VK_VOLUME_MUTE,0),KEYEVENTF_EXTENDEDKEY,0); 
  10. keybd_event(VK_VOLUME_MUTE,MapVirtualKey(VK_VOLUME_MUTE,0),KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,0); 
被阅1085次, 0票MFC 音量 发表评论

保护您的眼睛,教你如何把网页底色变成淡淡的苹果绿【转】

Admin 于 2008-10-22 00:15:59 发表HTML

现代人几乎每天都离不开电脑。在工作、娱乐、交友,甚至买卖股票的过程中,电脑都是我们的好帮手。但是,许多应用软件的背景,尤其是网页的底色通常被设定为刺眼的白色,看得久了,眼睛就会出现疲劳、酸涩,甚至流泪的现象。

卫生部近视眼重点实验室主任、复旦大学医学院眼科教授褚仁远说,绿色和蓝色对眼睛最好,建议大家在长时间用电脑后,经常看看蓝天、绿地,就能在一定程度上 缓解视疲劳。同样的道理,如果把电脑屏幕和网页的底色变为淡淡的苹果绿,也可在一定程度上有效地缓眼睛疲劳等症状。(褚仁远教授还说,红色是最刺激眼睛的 颜色,看得时间长了,就容易产生眼干、眼涩等症状,加重眼睛疲劳,所以建议大家不要使用红色作为电脑屏幕和网页的底色).

把窗口页面底色变成淡淡的苹果绿的方法:
第一步, 在桌面上点击鼠标右键,依次点击“属性”、“外观”、“高级”按钮。
第二步, 在打开的“高级”对话框中,在“项目”下拉列表里选择“窗口”。           
第三步,再打开“窗口”右边对应的“颜色”列表(下边还有一行,是控制字体颜色的),点“其他”,在打开的对话框里,把“色调”的参数设置为85,把 “饱和度”参数设置为90,把“亮度”参数设置为205(这个随自己的感觉调)[rgb(204,232,207)]。再点击“确定”,“确定”, “确定”,设置完成。
第四步,打开ie浏览器,选择“工具”栏中的“internet选项”,点击“辅助功能”按钮,在“不使用网页中指定的颜色”前打钩。

全部步骤完成后,网页、文件夹、文本文档里的背景颜色都变成了绿色。其中,色调、饱和度和亮度的参数值,还可以根据个人的喜好稍作修改,让自己用电脑的候最舒服。cctv1介绍的这三个数值是: 85; 125; 195.
cctv1还介绍了一项试验:两个人分别使用白色底和浅绿色底,连续看电脑20分钟后检测其视力,使用白底色者的视力已有明显下降;使用浅绿底色者的视力未变.

  1. <html> 
  2.     <head></head> 
  3.     <body style='background-color:rgb(85,125,195);'> 
  4.         <div style='height:200px;width:200px;background-color:rgb(204,232,207);'> 
  5.         asdfasdf 
  6.         </div> 
  7.     </body> 
  8. </html> 

 

被阅627次, 0票 发表评论

如何随机生成指定数目的国标汉字

Admin 于 2008-10-20 03:27:23 发表.NET

为了使每一个汉字有一个全国统一的代码,1980年,我国颁布了第一个汉字编码的国家标准: GB2312-80《信息交换用汉字编码字符集》基本集,这个字符集是我国中文信息处理技术的发展基础,也是目前国内所有汉字系统的统一标准。由于国标码 是四位十六进制,为了便于交流,大家常用的是四位十进制的区位码。所有的国标汉字与符号组成一个94×94的矩阵。在此方阵中,每一行称为一个"区",每 一列称为一个"位",因此,这个方阵实际上组成了一个有94个区(区号分别为0 1到94)、每个区内有94个位(位号分别为01到94)的汉字字符集。一个汉字所在的区号和位号简单地组合在一起就构成了该汉字的"区位码"。在汉字的 区位码中,高两位为区号,低两位为位号。 在区位码中,01-09区为682个特殊字符,16~87区为汉字区,包含6763个汉字。其中16-55区为一级汉字(3755个最常用的汉字,按拼音 字母的次序排列),56-87区为二级汉字(3008个汉字,按部首次序排列)。

所以,当我们需要n个任意汉字时,我们不必建一个全部汉字表,而是利用区位码实现常用汉字的提取。

下面的代码可以实现任意数目汉字的生成:

  1. /// <summary> 
  2. /// 此函数为生成指定数目的汉字 
  3. /// </summary> 
  4. /// <param name="charLen">汉字数目</param> 
  5. /// <returns>所有汉字</returns> 
  6. public static string[] CreateGBChar(int charLen) 
  7.     int area,code;//汉字由区位和码位组成(都为0-94,其中区位16-55为一级汉字区,56-87为二级汉字区,1-9为特殊字符区) 
  8.     string[] charArrary = new string[charLen]; 
  9.     Random rand = new Random(); 
  10.     for (int i = 0; i < charLen; i++) 
  11.     { 
  12.         area = rand.Next(16, 88); 
  13.         if (area == 55)//第55区只有89个字符 
  14.         { 
  15.             code = rand.Next(1, 90); 
  16.         } 
  17.         else 
  18.         { 
  19.             code = rand.Next(1, 94); 
  20.         } 
  21.         charArrary[i] = Encoding.GetEncoding("GB2312").GetString(new byte[] { Convert.ToByte(area+160), Convert.ToByte(code+160) }); 
  22.     } 
  23.     return charArrary; 

下面代码是解析汉字的区位码:

  1. //// <summary> 
  2. /// 获取汉字的区位码 
  3. /// </summary> 
  4. /// <param name="gbChar">汉字</param> 
  5. /// <returns>汉字的区位码</returns> 
  6. public static string GetAreaCode(char gbChar) 
  7.     byte[] gbBytes = Encoding.GetEncoding("GB2312").GetBytes(new char[] { gbChar });//解析汉字成二进制数组 
  8.     return string.Format("{0}:{1}", gbBytes[0].ToString("X"), gbBytes[1].ToString("X")); 

下面代码是根据区位码获取汉字:

  1. //// <summary> 
  2. /// 将区位码转换成汉字 
  3. /// </summary> 
  4. /// <param name="areaCode">区位码(长度为4)</param> 
  5. /// <returns>汉字</returns> 
  6. public static char GetGBChar(string areaCode) 
  7.     return Convert.ToChar(Encoding.GetEncoding("GB2312").GetString( 
  8.     new byte[] { Convert.ToByte(areaCode.Substring(0, 2), 16),  
  9.             Convert.ToByte(areaCode.Substring(2, 2), 16) })); 

 

被阅397次, 0票汉字 发表评论

IE代理的设置与取消

Admin 于 2008-10-20 03:25:28 发表.NET

要实时更新IE所有实例需调用如下API:

  1. [DllImport("wininet.dll", SetLastError = true)] 
  2. private static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int lpdwBufferLength); 

然后刷新IE设置:

  1. private static void RefreshIESettings() 
  2.     const int INTERNET_OPTION_REFRESH = 0x000025; 
  3.     const int INTERNET_OPTION_SETTINGS_CHANGED = 0x000027; 
  4.     InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0); 
  5.     InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0); 

最后写IE在注册表中的设置即可:

  1. public static void SetIEProxy(Proxy proxy) 
  2.     string proxyIP = ""
  3.     proxyIP=string.Format("{0}:{1}", proxy.ProxyAddr, proxy.ProxyPort); 
  4.     RegistryKey rk = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings"true); 
  5.     rk.SetValue("ProxyEnable", 1); 
  6.     rk.SetValue("ProxyServer", proxyIP); 
  7.     rk.Close(); 
  8.     RefreshIESettings(); 
  9.  
  10. public static void CancelIEProxy() 
  11.     RegistryKey rk = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings",true); 
  12.     rk.SetValue("ProxyEnable", 0); 
  13.     rk.Close(); 
  14.     RefreshIESettings(); 
  15.  
  16. public class Proxy 
  17. private string proxyName; 
  18. private string proxyAddr; 
  19. private int port; 
  20.  
  21. public Proxy(string name, string addr, int port) 
  22.     this.proxyName = name; 
  23.     this.proxyAddr = addr; 
  24.     this.port = port; 
  25.  
  26. public string ProxyName { get { return proxyName; } } 
  27. public string ProxyAddr { get { return proxyAddr; } } 
  28. public int ProxyPort { get { return port; } } 
  29.  
  30. public override string ToString() 
  31.     return proxyName; 

 

被阅615次, 0票代理 发表评论
2 / 11 / 87 | « 1 2 3 4 5 » |

Powered by MiniBoke v2.0.0.8 Build 0828

Copyright © 2008 迷你博客. All rights reserved.

粤ICP备07500939号