Java究竟怎么玩?http://blog.csdn.net/cping1982

菩提本无树,明镜亦非台,本来无一物,何处惹尘埃

用户操作
[即时聊天] [发私信] [加为好友]
匿名不具ID:cping1982
149456次访问,排名522好友15人,关注者28
机密……
cping1982的文章
原创 138 篇
翻译 0 篇
转载 39 篇
评论 302 篇
鹏凌三千(cping1982)的公告
本博评论删除规则如下:

1、辱骂性发言,无视其辱骂对象,一律删。

2、登录发表的评论,不违背第一条者一律不删。非登录发表的评论,过激者删。

3、若发生例外情况,则为CSDN博客系统自动删除。

声援SOFF|声援珊瑚虫:如果你是珊瑚虫用户,请坚决力挺声援珊瑚虫!

平生进退如飙风,一睨人才天下空。独向苍天横冷剑,何必生我惭英雄。

本人有效BLOG:

cping1982

ceponline

音乐:

风姿花传

ドラグ.スレイブ

ヒカルの碁

Believe

世界で一番ヤバイ恋

あんなに一緒だった

精忠报国

谁是大英雄

随遇而安

明天会吹什么风

逍遥游

爱江山更爱美人

最近评论
qingtianzhu:你好,我想购买你的软件,但是一直联系不上你,请告知联系方式,谢谢!
yao_ju_xian:看着挺好的啊,我现在也在学Java,不过我是学oracle那块的,我觉得你做的相当好了,能不能教教我啊?谢谢,我的邮箱是yaojuxian1988@yahoo.com.cn,非常感谢你能赐教!
.net:啥也不说支持楼主B/S小白
原理都不懂就在这里叽叽呀呀的
多回去看几年书吧
真像是在看笑话“呵呵”
如果易语言真有那么“好”没有中国人不支持的
可是(*^__^*) 嘻嘻……
明白的都明白
不明白的自己琢磨去吧
kiki820819:asdasd
kiki820819:asdasd
文章分类
收藏
    相册
    Java的PC游戏开发
    Java中的A*(A star)寻径实现
    Java仿雷电及其源代码
    Java制作的类祖码游戏-数字祖码
    Java实现窗体中角色逐渐风化效果
    Java版吃豆游戏
    人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[2]——踏破红尘
    Java[伪]寻径追踪实现
    JAVA中[人工无脑]系统(chatbot)的实现
    Java中2.5D游戏(斜45度角)的设计与实现(1)
    Java中2.5D游戏(斜45度角)的设计与实现(2)
    Java仿太阁立志传5
    JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
    JAVA实现拼图游戏
    Java来做马里奥[0]—让精灵再次舞动
    Java来做马里奥[1]—木叶传承
    Java来做马里奥[2]—食不厌精
    Java来做马里奥[3]—杂兵登场
    Java模拟桌球打击处理及绘制
    Java汉诺塔测试
    Java炸弹人实现及源码
    人生如梦游戏间,JAVA游戏开源开发讲座[番外篇]之AVG开发——皮影
    人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[0]——月晕础润
    人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[1]——风云初现
    人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[3]——邯郸学步
    人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[4]——一步莲华
    人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[5]——一树双花
    人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[6]——走马观花
    史上最扯Java图形绘制(J2SE)之一JAVA动画效果
    沉寂的国人开源项目
    bo-blog(blog系统,php项目)
    DockPanel Suite [Microsoft .NET Framework Winform UI]
    Hocate web framework[web框架]
    Loonframework-DAO[持久层框架]
    Loonframework-GAME[游戏框架,尚未发布]
    Loonframework-WEB[web框架,尚未发布]
    Luntbuild(软件管理工具)
    magike(php博客)
    myseelite(p2p流媒体系统,c++项目)
    newxy(新坐标)[web框架]
    opencrx(crm系统)
    redlion(web框架)
    x2blog(asp.net博客系统)
    YOYOPlayer(音乐播放器)
    袋鼠egg(服务器)
    经典Blog
    # gzfqh的专栏 →底层代码研究(病毒及汇编)(RSS)
    # java 3D 游戏编程(RSS)
    ApoGames(德国某人的Java游戏作品展示)
    Struts框架应用
    Struts框架应用~
    千里冰封[JAVA 浓香四溢]
    网络安全圈子
    经典站点
    Google
    IBM中国站
    JavaGame开发论坛
    JAVA开源大全
    Java爱好者
    Struts标签文档
    SUN 中国社区
    中国IT实验室
    数据库专区
    偶的其它应用实例
    C#将图像文件压缩为AVI文件播放
    Java&.Net虚拟机精简(GreenJVM&GreenDotNet发布)
    Java图形程序水纹倒映效果
    Java输出竖排古典文字
    .NET在线漫画下载程序
    C#转换AVI文件为BMP文件
    ClassLoader调用外部jar包
    ExtJS2.0开发与实践笔记[0]——初识ExtJS
    ExtJS2.0开发与实践笔记[1]——ExtJS中的Dialog与Form
    ExtJS2.0开发与实践笔记[2]——Ext中的Layout
    ExtJS2.0开发与实践笔记[3]——Ext中的Menu
    ExtJS2.0开发与实践笔记[4]——Ext中的动画处理
    JavaFx实现(1)-渐变效果
    JavaFx实现(2)-随机图形绘制
    Java中DAO的实现
    Java中Image翻转操作
    Java中将byte[]转为Blob对象
    Java中的A*(A star)寻径实现
    Java制作绿色软件(GreenJVM_0.1.0发布)
    JAVA图形操作类
    Java图形程序中的对话逐字显示实现
    Java实现任意文件在bmp中的隐藏与导出
    JAVA实现可设置背景的MDI窗口
    Java实现嵌入式数据库(文本数据库)代码实例
    Java实现类Windows导航栏
    Java正则表达式入门
    JAVA版JAVA IDE环境(源码)
    JAVA线程池的简单实现及优先级设置
    Java自定义JSlider UI
    Java获得系统环境变量
    Java音乐播放类
    ResultSet转为实体对象
    SWT行,AWT/Swing也行系列(1)-实现半透明及不规则窗体
    在JTable中加载进度条及进行操作
    在Swing中使用Html标签
    在SWT中使用ChartDirector
    浅谈java.util.concurrent包的并发处理
    浅谈Java集合中Array(数组)的应用
    精简JRE体积
    通过exe启动class
    偶的文章
    《三国以后有几国》
    中国本土化编程(汉语编程)之我见
    从珊瑚虫事件,看为什么中国出不了比尔.盖茨
    佛与专家
    叹今人无气节而作歌
    国产开源项目的七宗罪
    对Hibernate使用之愚见
    对Java(J2SE PC)开发之怪现象之我见
    浅谈命名规范[纯属强辩]
    灭了珊瑚虫,下一个是谁?
    率性而作无题歌一首
    百度对“十进制网络”的官方态度
    耻民
    论番茄花园的倒掉
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 Java中将byte[]转为Blob对象收藏

    新一篇: Java中DAO的实现 | 旧一篇: Java实现窗体中角色逐渐风化效果

    准备先把以前写的持久层及表示层框架写完再写loonframework-game包(实际上是想自己业余建站用,用现成的框架太无聊,重复发明轮子的最大意义就在于解闷……),在2005年时写过一个开头,由于自己没有整理文档,现在拿起来就觉得代码很乱,又懒于写文档,于是把一些心得类的东西整理一下,用以备忘。

    在此持久层框架中,我将持久化过程分为两个松耦合模块,第一模块封装jdbc操作,隐藏Connection及相关事务,处理driver差异后执行标准CRUD并释放资源,于第二模块进行实体映射操作。

    但和Spring JdbcTemplate等jdbc封装略有不同的是,我除了直接将结果集转为List和实体返回外,还引入了一个类似CachedRowSet但非继承CachedRowSet或ResultSet的结果集cache实体(没有提供诸如CachedRowSet的execute功能,原因大家都知道……PS:05年我用Hibernate还比较少,现在看来和Hierbante的ScrollableResults接口超级类似,颇感java技术殊途同归|||)。

    但在此类get数据时,由于我将所有ResultSet数据无差别以object方式存储,当object为二进制对象时,为实现blob和clob接口就需要进行数据转换,将二进制对象转为blob或clob实现,为此完成代码如下。

    比较hibernate的blobimpl而言(hibernate的blobimpl只有getBinaryStream()实现,因为别的对它也没用……),实现了更多的函数以供调用。

    BlobImpl.java
    package org.loon.framework.dao.lob;

    import java.io.BufferedInputStream;
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStream;

    import java.io.OutputStream;
    import java.sql.Blob;
    import java.sql.SQLException;

    import org.loon.framework.Loon;
    import org.loon.framework.helper.FileHelper;

    /**
     * <p>
     * Title: LoonFramework
     * </p>
     * <p>
     * Description:二进制大对象Blob实现,用于转化二进制对象为blob实例,只提供get部分方法(虽然象征性的写了
     * set实现,但没有对数据库进行操作,只是摆设……).
     * </p>
     * <p>
     * Copyright: Copyright (c) 2007
     * </p>
     * <p>
     * Company: LoonFramework
     * </p>
     * <p>
     * License: 
    http://www.apache.org/licenses/LICENSE-2.0
     * </p>
     * 
     * 
    @author chenpeng
     * @email:ceponline@yahoo.com.cn
     * 
    @version 0.1
     
    */

    public class BlobImpl implements Blob {


        
    private byte[] _bytes = new byte[0];

        
    private int _length = 0;

        
    /**
         * 构造函数,以byte[]构建blob
         * 
         * 
    @param bytes
         
    */

        
    public BlobImpl(byte[] bytes) {
            init(bytes);
        }


        
    /**
         * 构造函数,以InputStream构建blob
         * 
         * 
    @param bytes
         
    */

        
    public BlobImpl(InputStream input) {
            init(FileHelper.read(input));
        }


        
    /**
         * 构造函数,以blob重新构建blob
         * 
         * 
    @param bytes
         
    */

        
    public BlobImpl(Blob blob) {
            init(blobToBytes(blob));
        }


        
    /**
         * 初始化byte[]
         * 
         * 
    @param b
         
    */

        
    private void init(byte[] bytes) {
            _bytes 
    = bytes;
            _length 
    = _bytes.length;
        }


        
    /**
         * 将blob转为byte[]
         * 
         * 
    @param blob
         * 
    @return
         
    */

        
    private byte[] blobToBytes(Blob blob) {
            BufferedInputStream is 
    = null;
            
    try {
                is 
    = new BufferedInputStream(blob.getBinaryStream());
                
    byte[] bytes = new byte[(int) blob.length()];
                
    int len = bytes.length;
                
    int offset = 0;
                
    int read = 0;
                
    while (offset < len
                        
    && (read = is.read(bytes, offset, len - offset)) >= 0{
                    offset 
    += read;
                }

                
    return bytes;
            }
     catch (Exception e) {
                
    return null;
            }
     finally {
                
    try {
                    is.close();
                    is 
    = null;
                }
     catch (IOException e) {
                    
    return null;
                }


            }

        }


        
    /**
         * 获得blob中数据实际长度
         * 
         * 
    @return
         * 
    @throws SQLException
         
    */

        
    public long length() throws SQLException {
            
    return _bytes.length;
        }


        
    /**
         * 返回指定长度的byte[]
         * 
         * 
    @param pos
         * 
    @param len
         * 
    @return
         * 
    @throws SQLException
         
    */

        
    public byte[] getBytes(long pos, int len) throws SQLException {
            
    if (pos == 0 && len == length())
                
    return _bytes;
            
    try {
                
    byte[] newbytes = new byte[len];
                System.arraycopy(_bytes, (
    int) pos, newbytes, 0, len);
                
    return newbytes;
            }
     catch (Exception e) {
                
    throw new SQLException("Inoperable scope of this array");
            }

        }


        
    /**
         * 返回InputStream
         * 
         * 
    @return
         * 
    @throws SQLException
         
    */

        
    public InputStream getBinaryStream() throws SQLException {
            
    return new ByteArrayInputStream(_bytes);
        }


        
    /**
         * 获取此byte[]中start的字节位置
         * 
         * 
    @param pattern
         * 
    @param start
         * 
    @return
         * 
    @throws SQLException
         
    */

        
    public long position(byte[] pattern, long start) throws SQLException {
            start
    --;
            
    if (start < 0{
                
    throw new SQLException("start < 0");
            }

            
    if (start >= _length) {
                
    throw new SQLException("start >= max length");
            }

            
    if (pattern == null{
                
    throw new SQLException("pattern == null");
            }

            
    if (pattern.length == 0 || _length == 0 || pattern.length > _length) {
                
    return -1;
            }

            
    int limit = (int) _length - pattern.length;
            
    for (int i = (int) start; i <= limit; i++{
                
    int p;
                
    for (p = 0; p < pattern.length && _bytes[i + p] == pattern[p]; p++{
                    
    if (p == pattern.length) {
                        
    return i + 1;
                    }

                }

            }

            
    return -1;
        }


        
    /**
         * 获取指定的blob中start的字节位置
         * 
         * 
    @param pattern
         * 
    @param start
         * 
    @return
         * 
    @throws SQLException
         
    */

        
    public long position(Blob pattern, long start) throws SQLException {
            
    return position(blobToBytes(pattern), start);
        }


        
    /**
         * 不支持操作异常抛出
         * 
         
    */

        
    void nonsupport() {
            
    throw new UnsupportedOperationException("This method is not supported!");
        }


        
    /**
         * 释放Blob对象资源
         * 
         * 
    @throws SQLException
         
    */

        
    public void free() throws SQLException {
            _bytes 
    = new byte[0];
            _length 
    = 0;
        }


        
    /**
         * 返回指定长度部分的InputStream,并返回InputStream
         * 
         * 
    @param pos
         * 
    @param len
         * 
    @return
         * 
    @throws SQLException
         
    */