• Java的IO操作,个人理解。


    先看一段代码:

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.sql.Blob;
    import java.util.Date;
    
    import org.hibernate.Hibernate;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.service.ServiceRegistry;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    
    
    
    //测试类
    public class StudentsTest {
        
        private SessionFactory sessionFactory;
        private Session session;
        private Transaction transaction;
        @Before
        public void init()
        {
            //创建配置对象
            Configuration config=new Configuration().configure();
            config.addClass(Students.class);//这个需要加上(视频里面没有)
            //创建服务注册对象。
            ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder()
                    .applySettings(config.getProperties()).build(); //通过config.getProperties()读取配置文档。
            //创建会话工厂对象
            sessionFactory=config.buildSessionFactory(serviceRegistry);
            //创建会话对象
            session=sessionFactory.openSession();
            //开启事务
            transaction=session.beginTransaction();
        }
        @After
        public void destory()
        {
            transaction.commit();//提交事务
            session.close();//关闭会话
            sessionFactory.close();//关闭会话工厂
        }
        //把数据存入到数据库
        @Test
        public void testWriteBlob() throws Exception
        {
            Students s=new Students(1,"张三丰","男",new Date(),"武当山");
            //先获得照片文件
            File f=new File("d:"+File.separator+"jee-oxygen"+File.separator+"文档"+File.separator+"Picture"+File.separator+"孙悟空.png");
            //获得照片文件的输入流
            InputStream input=new FileInputStream(f);
            //创建一个Blob对象
            //createBlob(从哪个输入流读取,读取的长度(这里就是输入流可用的字节数))
            Blob image=Hibernate.getLobCreator(session).createBlob(input,input.available());
            //设置照片属性
            s.setPicture(image);
            //保存
            session.save(s);
        }
        //把数据从数据库读取放到本地
        @Test
        public void testReadBlob() throws Exception
        {
            //从数据库中获取该条数据的对象
            //get(类.class,主键值为1的数据)
            Students s=session.get(Students.class, 1);
            //获得Blob对象
            Blob image=s.getPicture();
            //获得输入流
            InputStream input=image.getBinaryStream();
            //创建输出流
            File f=new File("D"+File.separator+"孙悟空.png");
            //获得输出流
            OutputStream output=new FileOutputStream(f);
            //创建缓冲区
            byte[] buff=new byte[input.available()];
            //把输入流读取到缓冲区里面
            input.read(buff);
            //把缓冲区的内容写入到输出流
            output.write(buff);    
            //File对象就像是一个本地仓库,需要指明仓库的地址,而数据库是相对的另一个仓库
            //,输入流InputStream就像是数据库的专职运输人员,而输出流OutputStream就像是存储的专职运输人员
            //缓冲区byte[] buff就像是输入流和输出流两个运输人员要交接的一个快递柜。
            //如果要把数据读取到数据库,这个操作就要交给输入流运输人员。
            //要把数据读取到本地,就要输出流运输人员来干。
            //对于输入流和输出流来说,要从数据库这个仓库里面的东西放到本地仓库,先由数据库的专职人员拿钥匙从数据库取出来,
            //存放到一个快递柜里面,然后本地的专职运输人员,从快递柜里面,把东西拿出来,放到File这个对象说好的地址。
            //输入流运输人员放东西进入快递柜的操作,叫做read(),输出流把东西从快递柜取出来的操作,叫做write()。
        }
    }

    对于上面的数据读取到数据库,然后从数据库读取到本地的这几个操作,为了方便理解,做了如下比喻,也不知是否合理:

    //File对象就像是一个本地仓库,需要指明仓库的地址,而数据库是相对的另一个仓库
            //,输入流InputStream就像是数据库的专职运输人员,而输出流OutputStream就像是存储的专职运输人员
            //缓冲区byte[] buff就像是输入流和输出流两个运输人员要交接的一个快递柜。
            //如果要把数据读取到数据库,这个操作就要交给输入流运输人员。
            //要把数据读取到本地,就要输出流运输人员来干。
            //对于输入流和输出流来说,要从数据库这个仓库里面的东西放到本地仓库,先由数据库的专职人员拿钥匙从数据库取出来,
            //存放到一个快递柜里面,然后本地的专职运输人员,从快递柜里面,把东西拿出来,放到File这个对象说好的地址。
            //输入流运输人员放东西进入快递柜的操作,叫做read(),输出流把东西从快递柜取出来的操作,叫做write()。
  • 相关阅读:
    洛谷 P2590 [ZJOI2008]树的统计
    如何让文件夹隐藏起来,保护自己的隐私
    SharePoint入门——创建一个网站
    SharePoint 解决管理员密码修改后各种问题的来袭
    .NET创建一个即是可执行程序又是Windows服务的程序
    C#——WebApi 接口参数传参详解
    C#中对Web.Config、App.Config字符串加密与解密的方法
    邮件服务器常用地址和端口信息
    Unity3d 5.x搭载VS2013使用
    系统性能优化- Session丢失
  • 原文地址:https://www.cnblogs.com/alsf/p/7821354.html
Copyright © 2020-2023  润新知