`
wuxing429
  • 浏览: 16096 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论
阅读更多
今天看到有同事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 欢迎指教!
分享到:
评论
1 楼 wuxing429 2012-07-30  
  ok!

相关推荐

    java分段文件下载的实现与多线程下载最新版

    在Java编程中,分段文件下载和多线程下载是提高大文件下载效率的重要技术。以下将详细解释这两种技术的实现及其在项目中的应用。 **分段文件下载**: 分段文件下载是一种将大文件分割成多个小部分,然后分别下载的...

    java使用多线程读取超大文件

    首先,我们需要创建一个读文件工具类,名为`ReadFile`: ```java public class ReadFile extends Observable { private int bufSize = 1024; // 缓冲区大小 private byte key = "\n".getBytes()[0]; // 换行符 ...

    基于java语言的大文件分片传输.zip

    在Java中,我们可以使用`java.io`和`java.nio`包中的类来实现文件的读取、写入和分片。`FileInputStream`和`FileOutputStream`是基本的文件操作类,而`Channels`和`Buffers`则提供了更高效的I/O操作。 步骤如下: ...

    java实现文件的分割.rar

    通常,会采用缓冲区技术(如`java.nio.ByteBuffer`)来提高效率并控制内存使用。 6. **错误处理与异常安全**: 文件操作中可能出现各种异常,如文件不存在、权限问题、磁盘空间不足等。在实际编程中,应确保妥善处理...

    Java多线程读取大文件

    总之,Java多线程读取大文件是通过文件分区、内存文件映射和NIO技术来提升效率,同时通过多线程协作和合理的资源管理确保程序的稳定性和性能。这种策略尤其适用于需要高效处理大量数据的场景,如日志分析、数据导入...

    java实现多线程下载

    - 对于大文件,可以考虑使用异步I/O(NIO)以减少线程等待时间。 9. **资源释放**: - 下载完成后,记得关闭所有打开的输入/输出流和线程,释放系统资源。 10. **示例代码**: - 一个简单的多线程下载示例可能...

    基于Java的流媒体视频直播服务器设计与实现

    例如,使用Java NIO(非阻塞I/O)可以高效地处理大量并发连接,提升服务器的并发能力。 服务器架构设计是另一个关键点。通常,流媒体服务器需要支持RTMP(Real-Time Messaging Protocol)、HLS...

    java8源码-javasource:Java8sourcecodeanalysis.Java源码解析系列,集合、线程、NIO等

    Java 8在NIO的基础上引入了NIO.2,添加了文件系统接口,支持文件路径操作和文件属性查询,以及文件通道的直接字节数组操作。`Path` 接口和 `Files` 类是NIO.2的核心组件,允许开发者以更直观的方式处理文件。 此外...

    基于Java的高级操作系统

    书中会讲解如何用Java编写设备驱动,包括异步I/O和中断处理,同时也会探讨Java的NIO(非阻塞I/O)框架,这对于理解现代操作系统的性能至关重要。 此外,调度算法是决定系统效率的关键。通过Java实现,读者可以理解...

    JAVA核心知识点整理

    本文将从以下几个方面深入探讨Java的核心知识点:JVM内存模型、垃圾回收机制、引用类型、Java IO/NIO、集合框架以及JVM类加载机制。 首先,JVM内存模型是Java核心知识点中的基础。JVM内存分为线程私有和线程共享两...

    java多线程下载图片

    5. **URL连接与IO操作**:使用java.net.URL和java.nio包下的类来建立网络连接并读取数据。对于大文件,推荐使用BufferedInputStream和FileOutputStream,配合InputStreamReader和BufferedReader来提高读写效率。 6....

    JAVA核心面试知识整理.pdf

    本文件名为《JAVA核心面试知识整理.pdf》,所涉及的范围广泛,覆盖了Java技术体系中的多个关键领域,包括但不限于JVM、集合、多线程并发、反射、注解、Spring框架、微服务架构、网络编程、中间件技术如Netty与RPC、...

    Android多文件断点续传

    同时,`java.nio`包中的类,如`FileChannel`,可以用于高效地读写大文件并支持定位到特定偏移量。在断点续传过程中,`FileInputStream`和`FileOutputStream`可用于读写文件,而`RandomAccessFile`则能让我们在文件的...

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

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

    JAVA核心知识点整理2021.pdf

    - Java 5引入,JDK 8中做了重大改进,引入了分段锁机制。 - 提供了更高的并发性能。 四、JVM类加载机制 JVM在加载类时要经过一系列复杂的步骤。 1. 类加载过程: - 加载:查找并加载类文件数据。 - 验证:确保...

    java 八股文背题,换工作必备

    - **IO流**:了解输入输出流的基本概念,文件操作,以及NIO(非阻塞IO)。 2. **Java虚拟机(JVM)**: - **内存管理**:理解堆、栈、方法区、本地方法栈的概念,以及垃圾回收机制。 - **类加载机制**:双亲委派...

    东北大学软件学院最新操作系统实验Java

    通过Java的I/O流和NIO(New IO)库,学生可以构建一个简单的文件系统模型,学习文件的创建、读写、删除以及目录管理等操作。 4. **资源调度**:操作系统需要根据策略公平地分配系统资源。学生可能需要实现不同的...

    面试-Java一些常见面试题+题解之操作系统-OperatingSystem.zip

    2. 文件系统:理解Java的File类,以及NIO(New Input/Output)库如何与操作系统进行文件操作。 3. 进程间通信:Java中如何实现进程间的通信,如管道、套接字、命名管道等。 4. 性能优化:操作系统层面的优化,如...

    java精通程度应该会什么

    - `ConcurrentHashMap`: 高并发场景下的高效实现,采用了锁分段技术提高并发性。 - **Set**: 包括`HashSet`等,用于存储无序且不重复的元素。 - **其他集合**: 如`CopyOnWriteArrayList`(写时复制列表)、`Queue...

Global site tag (gtag.js) - Google Analytics