今天看到有同事blog中有个淘宝的笔试题也写了一个读大文件的东西,欢迎拍砖
题目是
统计一个单词可重复的英文文件(假设4G)中每个单词出现的次数,把结果按照英文排序放入一个文件中。并能够检索特定单词的出现次数。由于文件过大,不重复单词总数有限,需要考虑到执行速度和内存使用情况。(淘宝笔试技术题)
public String readFile(String fName, long start, int len)
throws Exception {
RandomAccessFile raf = new RandomAccessFile(fName, "rw");
byte src[] = new byte[len];
// 文件读完返回为null
if (raf.length() < start + len)
return null;
FileChannel channel = raf.getChannel();
MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_ONLY,
start, len);
for (int i = 0; i < len; i++) {
if (buffer.get(i) != 0) {
src[i] = buffer.get(i);
}
}
buffer.clear();
channel.close();
raf.close();
return new String(src,0,len);
}
IO读文件代码
public String[] readFile(String path, int form, int to)
throws Exception {
String strs[] = new String[to - form];
FileReader fr = new FileReader(path);
BufferedReader br = new BufferedReader(fr);
String temp = null;
int i = 0;
while ((temp = br.readLine()) != null) {
i++;
if (i > form && i < to) {
strs[i] = temp;
}
}
br.close();
fr.close();
return strs;
}
ps:代码中有很多bug 以前没有很多接触nio 欢迎指教!
分享到:
相关推荐
在Java编程中,分段文件下载和多线程下载是提高大文件下载效率的重要技术。以下将详细解释这两种技术的实现及其在项目中的应用。 **分段文件下载**: 分段文件下载是一种将大文件分割成多个小部分,然后分别下载的...
首先,我们需要创建一个读文件工具类,名为`ReadFile`: ```java public class ReadFile extends Observable { private int bufSize = 1024; // 缓冲区大小 private byte key = "\n".getBytes()[0]; // 换行符 ...
在Java中,我们可以使用`java.io`和`java.nio`包中的类来实现文件的读取、写入和分片。`FileInputStream`和`FileOutputStream`是基本的文件操作类,而`Channels`和`Buffers`则提供了更高效的I/O操作。 步骤如下: ...
通常,会采用缓冲区技术(如`java.nio.ByteBuffer`)来提高效率并控制内存使用。 6. **错误处理与异常安全**: 文件操作中可能出现各种异常,如文件不存在、权限问题、磁盘空间不足等。在实际编程中,应确保妥善处理...
总之,Java多线程读取大文件是通过文件分区、内存文件映射和NIO技术来提升效率,同时通过多线程协作和合理的资源管理确保程序的稳定性和性能。这种策略尤其适用于需要高效处理大量数据的场景,如日志分析、数据导入...
- 对于大文件,可以考虑使用异步I/O(NIO)以减少线程等待时间。 9. **资源释放**: - 下载完成后,记得关闭所有打开的输入/输出流和线程,释放系统资源。 10. **示例代码**: - 一个简单的多线程下载示例可能...
例如,使用Java NIO(非阻塞I/O)可以高效地处理大量并发连接,提升服务器的并发能力。 服务器架构设计是另一个关键点。通常,流媒体服务器需要支持RTMP(Real-Time Messaging Protocol)、HLS...
Java 8在NIO的基础上引入了NIO.2,添加了文件系统接口,支持文件路径操作和文件属性查询,以及文件通道的直接字节数组操作。`Path` 接口和 `Files` 类是NIO.2的核心组件,允许开发者以更直观的方式处理文件。 此外...
书中会讲解如何用Java编写设备驱动,包括异步I/O和中断处理,同时也会探讨Java的NIO(非阻塞I/O)框架,这对于理解现代操作系统的性能至关重要。 此外,调度算法是决定系统效率的关键。通过Java实现,读者可以理解...
本文将从以下几个方面深入探讨Java的核心知识点:JVM内存模型、垃圾回收机制、引用类型、Java IO/NIO、集合框架以及JVM类加载机制。 首先,JVM内存模型是Java核心知识点中的基础。JVM内存分为线程私有和线程共享两...
5. **URL连接与IO操作**:使用java.net.URL和java.nio包下的类来建立网络连接并读取数据。对于大文件,推荐使用BufferedInputStream和FileOutputStream,配合InputStreamReader和BufferedReader来提高读写效率。 6....
本文件名为《JAVA核心面试知识整理.pdf》,所涉及的范围广泛,覆盖了Java技术体系中的多个关键领域,包括但不限于JVM、集合、多线程并发、反射、注解、Spring框架、微服务架构、网络编程、中间件技术如Netty与RPC、...
同时,`java.nio`包中的类,如`FileChannel`,可以用于高效地读写大文件并支持定位到特定偏移量。在断点续传过程中,`FileInputStream`和`FileOutputStream`可用于读写文件,而`RandomAccessFile`则能让我们在文件的...
当客户端请求下载一个大文件时,它可以指定一个范围,服务器根据这个范围返回对应的部分数据,从而实现分段下载。 在Java中,我们可以使用`java.util.concurrent`包下的多线程工具类来构建断点续传的并发处理模型。...
- Java 5引入,JDK 8中做了重大改进,引入了分段锁机制。 - 提供了更高的并发性能。 四、JVM类加载机制 JVM在加载类时要经过一系列复杂的步骤。 1. 类加载过程: - 加载:查找并加载类文件数据。 - 验证:确保...
- **IO流**:了解输入输出流的基本概念,文件操作,以及NIO(非阻塞IO)。 2. **Java虚拟机(JVM)**: - **内存管理**:理解堆、栈、方法区、本地方法栈的概念,以及垃圾回收机制。 - **类加载机制**:双亲委派...
通过Java的I/O流和NIO(New IO)库,学生可以构建一个简单的文件系统模型,学习文件的创建、读写、删除以及目录管理等操作。 4. **资源调度**:操作系统需要根据策略公平地分配系统资源。学生可能需要实现不同的...
2. 文件系统:理解Java的File类,以及NIO(New Input/Output)库如何与操作系统进行文件操作。 3. 进程间通信:Java中如何实现进程间的通信,如管道、套接字、命名管道等。 4. 性能优化:操作系统层面的优化,如...
- `ConcurrentHashMap`: 高并发场景下的高效实现,采用了锁分段技术提高并发性。 - **Set**: 包括`HashSet`等,用于存储无序且不重复的元素。 - **其他集合**: 如`CopyOnWriteArrayList`(写时复制列表)、`Queue...