`
vaniice
  • 浏览: 41216 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

javaNIO局部修改文件中指定位置的部分数据(转)

    博客分类:
  • NIO
 
阅读更多

javaNIO局部修改文件中指定位置的部分数据

 

有如下情况下可以用到内存文件映射技术解决问题:
1. 不要复制文件中所有的数据,只需要修改文件中局部的数据。
2. 并行\分段处理大文件。

如下代码示使用javaNIO局部修改文件中指定位置的部分数据:
/**
* 修改文件中的某一部分的数据测试:将字定位置的字母改为大写
* @param fName  :要修改的文件名字
* @param start:起始字节
* @param len:要修改多少个字节
* @return :是否修改成功
* @throws Exception:文件读写中可能出的错
* @author  javaFound
*/
public static boolean changeFile(String fName,int start,int len) throws Exception{
//创建一个随机读写文件对象
java.io.RandomAccessFile raf=new java.io.RandomAccessFile(fName,"rw");
long totalLen=raf.length();
System.out.println("文件总长字节是: "+totalLen);
//打开一个文件通道
java.nio.channels.FileChannel channel=raf.getChannel();
//映射文件中的某一部分数据以读写模式到内存中
java.nio.MappedByteBuffer buffer=  channel.map(FileChannel.MapMode.READ_WRITE, start, len);
//示例修改字节
for(int i=0;i<len;i++){
byte src=    buffer.get(i);
buffer.put(i,(byte)(src-31));//修改Buffer中映射的字节的值
System.out.println("被改为大写的原始字节是:"+src);
}
buffer.force();//强制输出,在buffer中的改动生效到文件
buffer.clear();
channel.close();
raf.close();
return true;
}
//测试主方法
public static void main(String[] args) throws Exception{
changeFile("BigFileRW.java",3,5);
System.out.println(" change OK... ");
}

要想看到测试结果,需要在项目的的当前目录下创建一个名为BigFileRW.java文本文件,其中写上10上以上的字母。运行如上程序,文件中第3个 字母起后面5个都变为大写了。

NIO可以理解为传统IO的加强版,功能和性能都加强了,但使用变得更复杂。

分享到:
评论

相关推荐

    Java多线程与线程安全实践-基于Http协议的断点续传

    当客户端请求下载一个大文件时,它可以指定一个范围,服务器根据这个范围返回对应的部分数据,从而实现分段下载。 在Java中,我们可以使用`java.util.concurrent`包下的多线程工具类来构建断点续传的并发处理模型。...

    jdk1.5中文

    虽然NIO.2是Java 7引入的,但它是对Java 5.0中NIO的扩展,提供了更高级别的文件系统操作,如文件通道、异步I/O等。 13. **反射API改进** 反射API在Java 5.0中也有一些改进,比如`Class.getMethod()`和`Class.get...

    jdk5 64位exe文件.zip

    虽然JDK5本身并未引入NIO.2,但这个特性在后续的JDK7中出现,是对JDK5中NIO(非阻塞I/O)的扩展,提供了更高级别的文件系统操作和异步I/O。 **64位版本的优势:** 64位版本的JDK5能够利用64位操作系统提供的更大...

    Java面试题2.docx

    - 修饰局部变量:创建不可变对象,如匿名内部类中的 final 变量。 5.java 中的 Math.round(-1.5) 等于多少? Math.round 方法会将浮点数四舍五入为最接近的整数。对于 -1.5,四舍五入的结果是 -1。 6.String 属于...

    Java高级知识

    - **栈**: 用来存储局部变量等数据,每个线程创建的时候都会创建一个栈,用于存储线程私有的数据。 - **本地方法栈**: 与虚拟机栈所发挥的作用非常相似,其区别只是虚拟机栈为虚拟机执行Java方法服务,而本地方法栈则...

    java经典面试题

    - `==` 比较的是两个对象的引用是否相同,即它们是否指向内存中的同一位置。 - `equals` 方法用于比较两个对象的内容是否相等,默认情况下它也是比较引用,但许多类(如 `String`)重写了此方法以比较实际内容。 ...

    Java性能优化技巧集锦

    以上内容仅涵盖了部分Java性能优化技巧,实际应用中还需要根据具体项目需求和环境进行针对性优化。优化是一个持续的过程,涉及代码结构、算法选择、资源管理等多个方面。理解并熟练运用这些技巧,能显著提升Java应用...

    api.rar_JavaTM 2 Platform

    10. **NIO.2(New I/O API)**:提供了一套新的I/O API,支持异步I/O操作,提供了文件系统操作的更多功能,比如文件属性的获取和修改,文件路径的处理等。 压缩包内的“api.chm”文件很可能是Java 2 Platform ...

    JAVA核心知识点整理.pdf

    它提供了一个运行环境,使得Java程序可以在不同的操作系统上运行而无需修改。 ##### 线程 - **概念**: 在JVM中,每个Java应用程序都有至少一个线程,即main线程。JVM支持多线程处理,允许应用程序同时执行多个线程...

    1剑盛二面准备试题.txt1剑盛二面准备试题.txt

    17. **Files类的常用方法**:Files是java.nio.file包中的类,提供了文件操作的常用方法,如exists()检查文件是否存在,readAllBytes()读取文件的所有字节,delete()删除文件,copy()复制文件,move()移动文件等。...

    Tomcat7性能优化

    - **Java栈**:每个线程都有自己的栈空间,主要用于存储局部变量和方法调用上下文。 - **Java堆**:所有线程共享的内存区域,用于存储对象实例。 - **Young区**:年轻代,用于存储新创建的对象。 - **Tenured区*...

    百度2019年最新面试题库

    - **POST**方法:用于向指定资源提交数据进行处理请求(如提交表单),不能被缓存,不保留在浏览器历史记录中,可能会改变服务器状态。 #### Interface与abstract类的区别 - **接口(Interface)**: 只能包含抽象...

    j2se基础面试

    Java基础是所有Java开发者必备的知识体系,J2SE(Java 2 Platform, Standard Edition)是Java的核心部分,包含了用于开发和部署桌面应用的基本工具和API。以下是对J2SE面试中常见知识点的详细阐述: 一、基本规则:...

    JAVA面试题总览[整理].pdf

    1. JAVA中的基本数据类型包括:整型(byte、short、int、long)、浮点型(float、double)、字符型(char)和布尔型(boolean)。它们的字节数分别为:byte(1字节)、short(2字节)、int(4字节)、long(8字节)...

    Android C++高级编程:使用NDK_Onur Cinar, 于红PDF电子书下载 带书签目录 完整版

    7.2.1 修改示例应用程序使之能够使用Java线程 165 7.2.2 执行Java Threads示例 166 7.2.3 原生代码使用Java线程的优缺点 167 7.3 POSIX线程 168 7.3.1 在原生代码中使用POSIX线程 168 7.3.2 用pthread_create...

    J2EE武功秘籍

    - **开放封闭原则 (OCP)**:软件实体应该是可扩展的,而不可修改的。 - **里氏替换原则 (LSP)**:子类型必须能够替换掉它们的基类型。 - **依赖倒置原则 (DIP)**:高层模块不应该依赖于低层模块,二者都应该依赖于...

    (2024)跳槽涨薪必备精选面试题.pdf

    - Java栈中局部变量表中的引用对象。 - 本地方法栈中JNI(Native方法)引用的对象。 3. **项目如何排查JVM问题** - 使用 JVM 监控工具如 VisualVM、JConsole 等。 - 分析内存泄漏、CPU 使用率等问题。 - 优化...

Global site tag (gtag.js) - Google Analytics