摘要: 今天项目中有一个“印章管理”的功能,一直运行的没什么问题,今天突然在插入印章的时候出现了错误,后来跟了一下代码,发现当底层数据库为Postgresql时,我们将一个印章(也就是一个jpg的图片)写入数据库时,出现了错误。原来的插入代码如下: 1. PreparedStatement ps = conn.prepareStatement("INSERT INTO images VALUES (?, ?)");2. ps.setString(1, file.getName());3. ps.setBinaryStream(2, fis);问题出现在第三行,原来在Postgres 阅读全文
posted @ 2013-04-01 23:24 chenfei0801 阅读(323) 评论(0) 推荐(0) 编辑
摘要: 今天写一个读写程序,运用到InputStream的reset方法是发现竟然失败了,然后查了一下JDK源码,发现BufferInputStream重写了父类FilterInputStream的mark和resetf方法,其有支持 mark 和 reset 方法的能力。而FileInputStream则没有重写父类InputStream的这两个方法,其不具有mark和reset方法的能力。在JDK源码中,写到 publicsynchronizedvoidmark(intreadlimit) 在该输入流中标记当前位置。后续调用reset方法重新将流定位于最后标记位置,以便后续读... 阅读全文
posted @ 2013-04-01 23:05 chenfei0801 阅读(18228) 评论(0) 推荐(1) 编辑
摘要: JDK1.4引入了文件加锁机制。它允许我们同步访问某个作为共享资源的文件。不过,竞争同一文件的两个线程可能在不同的Java虚拟机上,或者一个是Java线程,另一个是操作系统中的其他的某个本地线程。文件加锁对其他的操作系统进程是可见的,因为Java的文件加锁直接映射到了本地操作系统的枷锁工具。 通过对FileChannel调用tryLock()或者lock(),就可以获得整个文件的FileLock。其中tryLock()是非阻塞式的,它设法获得锁,如果不能获得(其他的一些进程已经持有相同的锁,并且不共享),它将直接从方法调用返回。lock()则是阻塞式的,它要阻塞进程直至锁可以获得,或... 阅读全文
posted @ 2013-03-31 21:15 chenfei0801 阅读(2697) 评论(0) 推荐(0) 编辑
摘要: Reader和Writer 首先,我们要明确一点,Reader和Writer不是为了取代InputStream和OutStream的,而且他们之间在代码上可以看到,也没有什么直接的关系。两者最大的区别呢,是Reader和Writer提供兼容Unicode与面向字符的I/O功能,而后两者则是提供面向字节形式的I/O操作。(1个字符=2个字节) 有的时候,我们需要将来自于字节层次结构中的类和来自于字符层次结构中的类结合起来使用,这时候,从应用场景上就可以看到,这是典型的适配器模式。。。适配器类,InputStreamReader可以把InputStream转化为Reader,而Ou... 阅读全文
posted @ 2013-03-31 20:31 chenfei0801 阅读(257) 评论(0) 推荐(0) 编辑
摘要: I/O操作给人感觉倒不是很难,就是设计到的类和方法太多,太繁琐了,如何辨别这些方法以及如何合理的对文件进行操作就显得很重要了。本文就来详细的介绍和总结Java I/o操作设计的相关内容 1)输入和输出 首先让我们来认识一个在I/O操作中经常会提及的名词“流。什么叫“流”呢?按照”Thinking in java“中的解释为”它(流)代表任何有能力产出数据的数据源对象或者有能力接受数据的接收端对象,'流'拼·屏蔽了实际的I/O设备中处理数据的细节“。 很显然I/0操作肯定是要涉及两个方面的即输入和输出 InputStream作用来表示那些从不同数据源产生输入的类,... 阅读全文
posted @ 2013-03-31 20:25 chenfei0801 阅读(730) 评论(0) 推荐(0) 编辑
摘要: JDK1.4开始,加入了java.nio.*包,在这个包中加入了新的JAVA I/O类库,以便加快I/O操作的速度。在nio中读写之所以提高,只要是采用了更接近操作系统执行I/O操作的结构——通道和缓冲区。在《Thinking in Java》中有举了一个例子来说明通道和缓冲区的作用。 可以想象一个煤矿,通道时一个包含煤层(数据)的矿藏,而缓冲区则是派送到矿藏的卡车。卡车载满煤炭而归,而我们再从卡车上获得煤炭。也就就说,我们并没有与通道直接交互,我们只是和缓冲区交互,并把缓冲区派送到通道。通道要么从缓冲区获得数据,要么像缓冲区发送数据。 唯一直接与通道交互的缓冲区是ByteB... 阅读全文
posted @ 2013-03-31 16:38 chenfei0801 阅读(789) 评论(0) 推荐(0) 编辑
摘要: java 提供的标准模型有 System.in, System.out, System.err。平日里我们经常用到他们3个,其中用的最多的就是System.out.println()等了,最近突然想到,他们是怎么实现的呢?下面是JDK中者三者的定义的源码: public final static InputStream in = nullInputStream(); public final static PrintStream out = nullPrintStream(); public final static PrintStream err = nullP... 阅读全文
posted @ 2013-03-28 23:33 chenfei0801 阅读(505) 评论(0) 推荐(0) 编辑