关于使用java的java.nio.channels.FileLock,实现程序对文件的独占读写的问题

关于使用java的java.nio.channels.FileLock,实现程序对文件的独占读写的问题,第1张

用你的方法,当你锁住文件再解锁的时候你会发现,原来文件里的内容不见了,所以后一段读文本的程序只能读到一个null ,你可以参考这个http://blog.csdn.net/wangjichen_1/article/details/6205779

可能是环境变量配置错误,接下来就来介绍解决办法。

延展阅读:

1、首先打开我们的开发工具myeclispe,然后点击File,选择New,在点击Java Project选项来新建个java工程项目,如下图所示。

2、这里我新建了三个java类。一个是BaiDu类作为父类,一个JingYan类作为子类。还有一个AesTest类是来测试我们结果的,如下图所示。

3、在BaiDu.java父类中,就定义一个name属性。在JingYan.java类里,我们是先继承了BaiDu这个类,然后又定义了个Cname属性,如下图所示。

4、在AesTest.java类里面写上测试代码,这里注意,把定义的baidu赋值给jingyan,由于类型不一致,所以要进行类型强制转化,用JingYan这个类来进行强制转换,如下图所示。

5、写好后,就可以执行这段代码了,执行发现报错java.lang.ClassCastException。报错的意思就是强制类型转换异常。

6、接着,我们在修改下代码,这里是把jingyan赋值给baidu,由于类型不一致,所以要进行类型强制转化,用BaiDu这个类来进行强制转换,修改好后,再来执行,发现此时可以正常运行,输出想要的结果。

7、出现java.lang.ClassCastExceptio错误是指类型强制转换出错了。当我们用子类对象去强制转换父类对象就会报错,或者使用子类对象 = 父类对象,同样会抛出java.lang.ClassCastException。

JDK1.4以后就提供java.nio的包,nio主要提供字节与字符的映射、内存映射文件和文件加锁机制

其中内存映射文件在读取大文件时可能会用上,因为内存映射不是直接把文件加载到JVM内存空间

而是借用 *** 作系统对文件的读取,这经历了由当前Java态进入到 *** 作系统内核态,再由 *** 作系统读取文件,

并返回数据到当前Java态的过程。由Java态进入 *** 作系统内核态离不开nio包中两个重要的类

FileChannel 和 ByteBuffer。FileChannel表示文件通道,可以从FileInputStream、FileOutputStream

以及RandomAccessFile对象获取文件通道,你可以从文件通道直接读取文件,也可以使用“内存映射”

即使用通道,将文件内存映射到ByteBuffer,可以映射一部分内容,也可以映射全部内容,使用内存映射

能大幅提高我们 *** 作大文件的速度

FileChannel 和 ByteBuffer文件读取

[java] view plain copy

package nio

import java.io.BufferedInputStream

import java.io.File

import java.io.FileInputStream

import java.io.IOException

import java.io.RandomAccessFile

import java.nio.ByteBuffer

import java.nio.MappedByteBuffer

import java.nio.channels.FileChannel

import java.nio.channels.FileChannel.MapMode

/**

*

* Channel类似与流,数据可以从Channel读取到Buffer,也可以从Buffer写入到Channel

* 但通道和流还是有区别,比如流只能是单向读或写,而通道可以异步读写

*

* @author yli

*/

public class FileChannelTest {


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11539711.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-16
下一篇2023-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存