[google的考证]“兵来将挡,水来土掩” 单田芳说做 水来土存.

拼音bīng lái jiàng dǎng,shuǐ lái tǔ yǎn释义指根据具体情况,采取灵活的对付办法。来源元·无名氏《大战邳彤》:“主公,便好这兵来将挡,水来土掩。”示例常言道:“兵来将挡,水来土掩”,事到其间,道在人为。少不得你我打点礼物,早差人上东京,央及老爷那里去。

http://www.hangzhou8.com/cy/info/831.htm 

Read More

[技术总结]利用java网络通讯实现文件传输的编码问题.

前言: 总结了一下使用不当的char 和 byte 数组转换. 已经相关的问题.

1. 用到的类. FileReader  和 FileWriter ,操作方式 char[] 数组,

  if (TransState == this.FT_ONTRANSFILEBODY){
     // sendstr =transfilename;
      try {
        FileReader fr = new FileReader(transfilename);
        char buf[] = new char[2048];
        int i=0;
      while((i=fr.read(buf,0,2048))!=-1){
        // sendstr = buf.toString(); char[] to bytebuffer?
        //转换 buffer
        //Converter convertor= ByteToCharConverter.getDefault();

        byte[] bytes = new byte[i];
        //?? char byte 转换?
        for(int k=0;k<i;k++)
          bytes[k] = (byte) buf[k]; 强制转换真是愚蠢至极啊!!
    
   //?
        appendSendData(bytes);
       // initiateSend();
        System.out.println("ok i am sending /:"+ i+" /bytes");
      }
      System.out.println("ok i send over!");
      fr.close();

        byte[] bytes = new byte[i];
        //?? char byte 转换?
        for(int k=0;k<i;k++)
          bytes[k] = (byte) buf[k]; 强制转换真是愚蠢至极啊!!
    
   //?
        appendSendData(bytes);
       // initiateSend();
        System.out.println("ok i am sending /:"+ i+" /bytes");
      }
      System.out.println("ok i send over!");
      fr.close();

        byte[] bytes = new byte[i];
        //?? char byte 转换?
        for(int k=0;k<i;k++)
          bytes[k] = (byte) buf[k]; 强制转换真是愚蠢至极啊!!
    
   //?
        appendSendData(bytes);
       // initiateSend();
        System.out.println("ok i am sending /:"+ i+" /bytes");
      }
      System.out.println("ok i send over!");
      fr.close();

        byte[] bytes = new byte[i];
        //?? char byte 转换?
        for(int k=0;k<i;k++)
          bytes[k] = (byte) buf[k]; 强制转换真是愚蠢至极啊!!
    
   //?
        appendSendData(bytes);
       // initiateSend();
        System.out.println("ok i am sending /:"+ i+" /bytes");
      }
      System.out.println("ok i send over!");
      fr.close();

 服务器端:

else if(TransState == this.FT_ONTRANSFILEBODY){
         char[] buf = new char[2048];
         //?接收文件模式?
         int c =0;
         try {
         while ( (c = inbuffer.read(buf)) != -1) {
          //?writefile
          //try test. buf 0   —  6.
         String eof = new String(buf,0,6);
             if (eof.equals("FILEOK")) // 如果返回 fileok 关闭,退出.
             {
                   fw.close();
                   System.out.println(" Server recv End");
                   this.TransState = this.FT_TRANSFILEBODYOK;
                   break;
             }

             if (fw == null) fw = new FileWriter("c:\code\" + recvfilename);
             fw.write(buf, 0, c); //不断的写入文件中.
            }

结果是:服务器端收到的文件的大小和原文件不一致.仔细想想原来是在转化  char[] ->> byte[] 的时候得问题..

使用另外一种方式操作 byte[]的   InputStream / OutputStream 直接操作字节,

这会省去了char[] ->> byte[]的转换,数据也就正常了. 服务器接收一端对应的处理修改一下就可以了. 

稍后查了一下: 使用Converter 是可以将 char[] 转换成 byte [], 因为 char 涉及到编码问题, 如果是中文的话也认为是一个字符,读出来的时候 在强制转化的时候就抱错了, 比如: CA 转化成byte就只是 49了..所以丢掉了一些数据.

// 举个例子

String str =”英”;
//取得GB2312编码的字节
byte[] bytesGB2312 = str.getBytes(“GB2312”);

//取得平台缺省编码的字节(solaris为ISO8859_1,windows为GB2312)
byte[] bytesDefault = str.getBytes();

//用指定的编码将字节转换成字符串
String newStrGB = new String(bytesGB2312, “GB2312”);

再来一个高低位调换的函数: 如果利用原有Server或者Server不能做修改(通常是c/c++)就会遇到这个问题的.

 /**
   * 将int转为低字节在前,高字节在后的byte数组
   */
  private static byte[] toLH(int n) {
    byte[] b = new byte[4];
    b[0] = (byte) (n & 0xff);
    b[1] = (byte) (n >>
8 & 0xff);
    b[2] = (byte) (n >> 16 & 0xff);
    b[3] = (byte) (n >> 24 & 0xff);
    return b;
  }

呵呵.总而言之就是不要做理论的巨人 行动的矮子. 下面我就要把用户列表管理部分和引擎连接起来了.基本上很快就能传接起来了..

Read More

[技术总结] 郁闷了几天的NIO开发问题,终于解决了

Resource:: 

http://forum.java.sun.com/thread.jspa?forumID=4&messageID=1817105&threadID=412377  NIO SocketChannel non-blocking read
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4469394  (so) SocketChannels registered with OP_WRITE only release selector once (win)  ?实际上这个BUG只存在于 1.4.0beta以前的jvm中.

查看java的版本. java -version

GoogleKeyWord :
   1. selector nio 返回 
        http://www.matrix.org.cn/resource/article/0/437.html  为高速网络使用select
       
http://feidao.cnblogs.com/archive/2005/07/15/193788.html 同时遇到了很多地方都转载 ccidnet的一片技术文章, 却都是那么残缺不全.   
      selector nio 不返回,多了一个字,结果什么都没有搜出来.  
      bincompile vs bincompiler 差别就更大了.真的是一个都不能少.
   2. selectedkey .attachment
  还行,搜出了上面几个相关的连接. 真是详细. 对比了一下,发现自己犯了几个错误. 
      a)  new Server之后,没有调用注册.          

   public NioSocket createSocket(NioWorker worker, SocketChannel sc) throws IOException {
               SocketClient result = new SocketClient(sc);
               result.registerDecoder(new SocketDecoder());
               result.register(worker); //这行没有加,其实也不是没写,而是在copy的过程中,覆盖没了///
               AddClient(result);
               //
               sc.configureBlocking(false);
               SelectionKey k = sc.register(worker.s, SelectionKey.OP_READ );
               k.attach(result);    

  }

   b) 没有仔细的查看错误原因,解决问题的方法肯定是要对比正确的方式,这一点也是受到了 jniosocket的迷惑,因为它的那个sample是 Httpserver,所以不存在保持连接的问题, 所以httpserver可以工作,但是用做socket就不行了. 还有一个不同就是因为使用了 Java NIO, 因为传说它的性能是很棒的. 所以他的工作方式和以前的还是不一样的.

   public NioSocket createSocket(NioWorker worker, SocketChannel sc) throws IOException {
               SocketClient result = new SocketClient(sc);
               result.registerDecoder(new SocketDecoder());
               result.register(worker); //这行没有加,其实也不是没写,而是在copy的过程中,覆盖没了///
               AddClient(result);
               //
               sc.configureBlocking(false);
               SelectionKey k = sc.register(worker.s, SelectionKey.OP_READ );
               k.attach(result);    

  }

   b) 没有仔细的查看错误原因,解决问题的方法肯定是要对比正确的方式,这一点也是受到了 jniosocket的迷惑,因为它的那个sample是 Httpserver,所以不存在保持连接的问题, 所以httpserver可以工作,但是用做socket就不行了. 还有一个不同就是因为使用了 Java NIO, 因为传说它的性能是很棒的. 所以他的工作方式和以前的还是不一样的.

下面给大家一个范例的连接,很好的演示了 NIO Socket 服务器和客户端的工作..
 select I/O模型是基于事件驱动(event-drivern)的。所有输入源被注册到一个Selector对象上,它等待着任何输入源的活动。这个模型不同于流模型,但它仍是一个实体模型。很大程度上,可以说select模型运行在流模型之上。从硬件角度来讲,I/O是基于事件驱动的,因为像网卡、键盘和磁盘等外设在发送数据前都不会发出通知。
流模型用缓冲掩盖了阻塞式I/O调用之后的事件驱动I/O的复杂性使得程序变得更简单。但当你需要更高的速度时,你需要越过流这一层直接使用I/O事件本身。NIO库提供了非常优雅的基于缓冲的接口连接到Select模型。同时它也完全适合旧的流模型;

Read More

[发现|小糊涂的]用PASCAL也可以写j2me游戏?

MIDletPascal is programming language specifically suited for development of mobile applications. MIDletPascal compiler translates Pascal code into Java™ microedition (J2ME) bytecode. Programs written in MIDletPascal can be executed on any mobile device (such as mobile phones) with Java™ support. With MIDletPascal language developing mobile applications is easy and straightforward. If you are already familiar with Pascal, Delphi or Kylix you can start writing your own mobile applications within minutes.

[备注:] 真神奇的事情啊. 语法是PASCAL的. 内置图片编辑工具, 直接生成 jar 文件. 而且个人版是free的!.

下载地址:: http://www.midletpascal.com/download/MPInstall200.exe 

    
这时几个简单的游戏范例. 呵呵.

Read More

[小糊涂]排队写小说/另一个世界

   我试图描述一下我在另外一个世界的内心活动, 虽然游离于另外的世界,但我的思维却依旧那么的浅薄。所以我脸红一下。

来源:   排队写小说——更新中

编者按:全文共54节,刚好是一副扑克牌的数目,每个作者负责一张扑克牌:即一小节,希望能够成为各自独立又能自由组合的一种新的小说体。为了突破地域、风格、形式上的局限,拟通过Blog接龙的互动形式开展小说的群体创作,版权由所有作者共同拥有。

小说名称:无名
主题思路:关于个体“我”的故事,想象力、魔幻色彩
创作要求:每次一小节,请展现不同风格。
创作目的:尝试
创作形式:每位接龙者指定下一位,并在发表的同时注明上一位作者、作品链接及下一位作者、作品链接,接受指定后的作者请尽快完成接龙,有兴趣接龙的需向最新发表者申请。

为方便读者,在此提供本小说即时更新的全文地址:
http://www.bankbook.cn/bbs/viewthread.php?tid=41&pid=90&page=1#pid90

第七节 另一个世界

作者:小糊涂

良久 我从初到这个世界的喜悦中回到现实中。
我终于意识到自己进入了另一个世界, 我低头看了看, 原来我的商务男装都被大气层烧得七零八落了, 看到这里我替飞龙脸红了一下. 然后又想我的发型会是什么样子的呢? 要是老婆看到了一定会帮我把头发捋一捋. 为啥不觉得冷呢?

然后又想 现在是几点了?是不是要吃午饭了,很久没有吃美味的中餐了,巴顿这家伙自从去了中国回来,专门请了一个中国的厨子,据说祖上给当年的慈禧太后做过药膳. 上次吃的清蒸鲈鱼真是美味阿. 

呀,飞龙还在旁边呢..嘿嘿.是不是看到我的口水了. 回头看去, 就那么一眼,不经意间一个勾魂大法 ,飞龙脸又红了.

这么一闪念间,又飞到我家的上空(觉得又字很熟悉阿), 下面依然十分热闹. 似乎还没有结束. 远处已经看到了门前的那棵橡树, "飞龙.." 我轻轻地叫了一声, 飞龙依旧不说话只是脸红 真郁闷. .  

   既然只能这么飞着,不如加些表情吧,多一些个人色彩可以不可以?多一点点的活泼好了. 想到这里, 我开始挖空心思坐表情, 我先是想起了小时候和珍妮一起坐在大树下数星星, 嘿嘿 我现在也是个星啦, 哪个小朋友快来数啊. 我想我的表情是很愉悦的和虔诚的。接着我想起了和我一起在越战战斗过的巴布,那次我们被查理们(越共)包围了然后我的屁股被咬了一下..我隐隐觉得屁股的伤疤示威一样的又开始做痛了, 于是我的脸上一定是很悲伤难过的样子.  然后又想到了我是如何大意凛然的来到这里的, 我的表情一定是很不屑一顾的. 巴顿这头XX, 好容易有这个机会能不再忍受你醉醺醺的口臭啦,我自当义不容辞阿. 突然想到一件事情, 巴顿似乎还欠我上次的稿费呢, 愤恨中,咬牙切齿中.. 我用膀光扫了一下, 飞龙一定注意到了我的变化,已经隐隐感觉到我身上的杀气越来越重了.  哼,等俺回去看俺怎么收拾你. 
   回去….. 我突然一下子暗淡了, 而此时飞龙不只是脸红了,而且看到他竟然有泪水在眼眶中打转.  透露出一种极为复杂的表情,我想他一个人在这里太孤单了,不过做这种表情不应该流口水.. -10 分
  我还能回去吗? 我为什么要回去?在这里有什么不好? 飞龙一定看得很清楚,看着我的过去。也看着我的现在, 似乎也包括着将来。想到这里,我只好脸红了一下, 这次真的是赤身裸体了。想到以前做的所有的事情,竟然有人在旁观. 而且现在就在我的身边,真郁闷。 不过很快我又高兴起来, 嘿嘿, 现在我也就能看到全地球的人在我的下面忙碌,时而抬头看看高高在上的我, 哈哈 高高在上的感觉真好, 哈哈. 此时我流露出窃笑的表情。对了,我还有活泼没加到我的飞行动作中来呢, 我尝试着手舞足蹈一下以示庆祝自己伟大的发现, 飞龙呢, 似乎也尝试着扭动一下肥胖的身躯, 可憋红了脸 仍然没看到有明显的舞动. 只是在那里蹭了一蹭,哈哈。飞龙再次恢复了标志性的脸红.

   我突然想我是不是在呼吸?这里似乎没有空气的说. 于是我拼命的去感觉…我以前呼吸的那种感觉哪去了?… 我对中国的比干无心菜一事依稀还记得,( 人无心不可活啊), 我的心呢? 还在吗? 一下子我乱了飞行的步伐,也不再手舞足蹈了. 我还存在吗,我用手去摸自己的胸部, 但触去却是空空, 似乎都是空空的,而不要说心脏了,  我的头呢? 我到底在哪?我还存在吗?我看到的为什么触摸不到, 我看到的这个飞龙是什么? 幻象吗. 
   虽然我的身体已经进化了,但是我的思维还是那样的陈旧, 索性我不再去想了。也许我们就是这样慢慢的飞, 高兴也罢,无奈也罢, 却一刻也没有停止我飞行的步伐。虽然有时我会高兴一些,有时我会郁闷一些, 有时步伐上会加上我的手舞足蹈。我飞行的步伐还是没有停止,甚至于我在考虑为什么我能够飞行的这个问题的时候。同时也不知道未来是什么样的。以前的种种梦想变的虚无飘渺, 会飞了又能怎么样 ?打死也不会想到 会飞虽然是好事,但只能飞却也是件郁闷的事情。

第八章 龙的星球!

作者: 巴巴爸爸 .  http://www.88baba.com/ 


作者: 巴巴爸爸 .  http://www.88baba.com/ 


其它几章的连接

  
第一节:科恩兄弟的party
作者:愤青TOMTOM
地址: http://spaces.msn.com/members/tomtom74520/Blog/cns!1pM_d1C8tYSAi818CrL0OmSw!134.entry?owner=1

   
 第二节   剧本  

作者:翅
地址:http://www.blogcn.com/User3/flyingseraph/blog/25387558.html

 
第三节 扣子之死  
作者:白小刺
地址: http://www.sohoxiaobao.com/chinese/bbs/blog_view.asp?id=109644   

第四节 公子有课
作者:nksheng
地址: http://www.blogcn.com/User3/nksheng/blog/25745983.html   

第五节  葬礼
作者:向左走
地址:http://www.sohoxiaobao.com/chinese/bbs/blog.asp?id=19771 

第六节  升仙
作者:挠头蛇

地址: http://www.blogcn.com/User3/lzsong/blog/26063316.html

Read More

[MobileDev]Read J2Me Game Programming Via Google's Print. 信息的自由传播规则.

Re

J2Me Game Programming

by Martin J Wells
Provided by Thomson Course Technology through the Google Print Publisher Program
 

Thomson Course Technology

[备注 ] Google’s Print 提供了很多多的电子书的 Online. 今天发现竟然还有这本书. 真是不错. Dearbook 上面也有卖. 不过不知道具体内容的话, 可以先看看电子版的,觉得好的再来买.  Save your $. 其实Google Print 早就知道了,但还是没有深入的挖掘他, 所以一个好东西也需要挖掘 才能更好的利用。细节事实体现出了这个 Google Print的作用还是蛮大的, 比空口说要更容易打动人心. 也算是Google 充分利用了信息的自由传播规则.

 可以在线阅读这本书.. click here.  

😛 这本书我去年的时候已经拿到电子版的. 但是在本地的机器里找东西 还是很费劲的. 不知道是我的脑子坏了还是…

Read More

[blog观察|小糊涂]象收邮件一样收BLOG (2)(转)

转:http://society.mblogger.cn/babyfish/posts/75745.aspx

象收邮件一样收BLOG (2)

之前介绍过RSSFWD,现在介绍另一个:blogarithm

对比;RSSFWD不需邮件激活,而blogarithm需要,可以一个账户对应多个订阅的BLOG。

RSSFWD退定方便,只需要单击邮件中的退订链接就可以,而blogarithm需要到网站登陆进去再delete.

RSSFWD展示BLOG的全部内容,而blogarithm只是节选。

而blogarithm有什么优点呢?看到右边的下拉菜单了么?有10多个最近blog的标题吧,确定了点go,就直奔blog的叶子去了。就是说收一封email可以选择看很多文章,一对多。而那个是老老实实一对一。

还是得提RSS,即使这个。也是一篇不拉的(见昨日已隐藏的小秘密,没看到么拉倒)发布了马上删除,email里照样能收到。神奇的互联网技术。

[备注] 和我以前发的rss阅读新闻组 很相像. 就是rss和 已有服务相结合. 当一个新事物产生的时候, 创新的一个低级的方法是 简单的相加, 新事物+旧事物 = 创新. 所谓换汤不换药. 但有意思的事情是, 因为信息的不对称,会使得假李逵会成为真的李逵. 呵呵.

Read More