超大文件我们使用普通的文件读取方式都很慢很卡,在java中为我提供了RandomAccessFile函数,可以快速的读取超大文件并且不会感觉到卡哦,下面看我的一个演示实例。

服务器的日志文件往往达到400多M,简单的文件读取实在太慢,太占用机器资源。

特别是如果你需要5分钟就扫描一次日志文件,来统计一些即时数据。比如刚才10分钟的来访客户(大型网站用户统计系统例如51.la 会经常用到吧。)即时扫描大数据文件中的一部分显得非常之重要。
本文讲述了如果使用java的RandomAccessFile方法从一个很大的文件来读取部分字节

测试文件总大小46085个字节

读取文件最后85个字节

文件大小:46085
85

测试效果

扩展功能 —> 优酷视频 
其他的如奇艺,土豆之类操作顺序相同。当然我们也可以读取从46000只读取20个字节,看个人需要,这里仅仅作为示例

package com.javaer.examples.file;

import java.io.IOException;
import java.io.RandomAccessFile; public class ReadBigFile {
public static void readBigFile() throws IOException{
String fileName = "/Users/mc2/Desktop/youku.txt";
RandomAccessFile randomFile = null;
randomFile = new RandomAccessFile(fileName, "r");
long fileLength = randomFile.length();
System.out.println("文件大小:" + fileLength);
int start = ;
randomFile.seek(start);
byte[] bytes = new byte[];
int byteread = ;
// 一次读10个字节,如果文件内容不足10个字节,则读剩下的字节。
// 将一次读取的字节数赋给byteread
while ((byteread = randomFile.read(bytes)) != -) {
// System.out.write(bytes, 0, byteread);
}
System.out.println(bytes.length);
System.out.println(new String(bytes,"UTF-8"));
if (randomFile != null) {
randomFile.close();
} }
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
ReadBigFile.readBigFile();
} }

即使很大的文件,从里面读取一点数据,速度也很快。全部读取出来,也会占用很少的内存。

核心提示: randomFile.seek(start);

跳跃读取,从这里开始读。指针直接指到start这个位置开始读取文件。

bytes获取可以作如下替换,不同场合,不同使用

byte[] bytes = new byte[];
int byteread = ;
// 一次读10个字节,如果文件内容不足10个字节,则读剩下的字节。
// 将一次读取的字节数赋给byteread
while ((byteread = randomFile.read(bytes)) != -) {
// System.out.write(bytes, 0, byteread);
}
System.out.println(bytes.length);byte[] bytes ;
int byteread = ; ByteArrayOutputStream byteout = new ByteArrayOutputStream();
     byte tmp[] = new byte[];
     byte context[];
     int i = ;
     int has=;
    while ((i = randomFile.read(tmp)) != -) {
     byteout.write(tmp, , i);
     has +=i;
   if(has > )
     break;
  }
    bytes = byteout.toByteArray();

java中利用RandomAccessFile读取超大文件的更多相关文章

  1. java中利用dom4j解析XML文件

    官网下载Dom4j地址:https://dom4j.github.io/ 注意:使用Dom4j开发,需下载dom4j相应的jar文件 题目:后台利用dom4j解析student.xml文件,并返回Li ...

  2. PHP读取超大文件的实例代码

    数据量大带来的问题就是单个文件很大,能够打开这个文件相当不容易,记事本就不要指望了,果断死机   去年年底的各种网站帐号信息的数据库泄漏,很是给力啊,趁机也下载了几个数据库,准备学学数据分析家来分析一 ...

  3. Java 操纵XML之读取XML文件

    Java 操纵XML之读取XML文件 一.JAVA DOM PARSER DOM interfaces The DOM defines several Java interfaces. Here ar ...

  4. 在JAVA中利用public static final的组合方式对常量进行标识

    在JAVA中利用public static final的组合方式对常量进行标识(固定格式). 对于在构造方法中利用final进行赋值的时候,此时在构造之前系统设置的默认值相对于构造方法失效. 常量(这 ...

  5. [转] C#实现在Sql Server中存储和读取Word文件 (Not Correct Modified)

    出处 C#实现在Sql Server中存储和读取Word文件 要实现在Sql Server中实现将文件读写Word文件,需要在要存取的表中添加Image类型的列,示例表结构为: CREATE TABL ...

  6. Java中利用随机数的猜拳游戏

    Java中利用随机数的猜拳游戏,实现非常简单,重难点在于随机数的产生. 首先GameJude类是用于判断输赢的一个类: package testGame; public class GameJudge ...

  7. php中file_get_contents如何读取大容量文件

    php中file_get_contents如何读取大容量文件 一.总结 一句话总结:使用file_get_contents()进行分段读取,file_get_contents()函数可以分段读取 1. ...

  8. python中configparser模块读取ini文件

    python中configparser模块读取ini文件 ConfigParser模块在python中用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(se ...

  9. java 中利用反射机制获取和设置实体类的属性值

    摘要: 在java编程中,我们经常不知道传入自己方法中的实体类中到底有哪些方法,或者,我们需要根据用户传入的不同的属性来给对象设置不同的属性值,那么,java自带的反射机制可以很方便的达到这种目的,同 ...

随机推荐

  1. C# WinForm登录窗口代码

    Main窗体为应用程式主窗体,Login为登录窗体.均为SDI窗体.     两种实现方式如下: 1.应用程式入口放在Login窗体,在Login窗体实现登录机制,验证通过则创建Main窗体的实例,并 ...

  2. 蓝牙(BLE)应用框架接口设计和应用开发——以TI CC2541为例

    本文从功能需求的角度分析一般蓝牙BLE单芯片的应用框架(SDK Framework)的接口设计过程,并以TI CC2541为例说明BLE的应用开发方法. 一.应用框架(Framework) 我们熟知的 ...

  3. 【PHP缩略图类】手机照片不能生成缩略图问题以及解决方式

    [本文原创,谢绝转载] 一.出现的问题 这几天做了手机上传照片并裁出缩略图的接口的測试,发现无论怎么.生成的缩略图都是一片漆黑.:-( 然后就把这个缩略图类单拿出来进行測试,发现仅仅要是手机拍出来的照 ...

  4. Using SSL Certificates with HAProxy--reference

    原文地址:http://serversforhackers.com/editions/2014/07/29/haproxy-ssl-termation-pass-through/ Overview I ...

  5. RxJava 教程-1 简介 原理 线程控制 变换

    简介 RxJava 是什么? RxJava 在 GitHub 主页上的自我介绍是 RxJava is a Java VM implementation of ReactiveX: a library ...

  6. 关于myeclipse中导入的项目修改项目名使得发布到tomcat访问路径正确

    我新的项目基于旧的的项目,在Myeclipse8.6里我复制了一个,但是在部署到tomcat7.0时部署过去的文件夹名还是原来的旧项目名,不是新的,但里面内容为新项目,是不是什么地方没有改.求救各位高 ...

  7. Struts1 中实现Action跳转地址栏变化的方法

    Action进行跳转,有时候地址栏不变化,如果重复刷新就会重复提交, 这里一般需要进行重定向: 1.在xml里面进行配置 <action path="/checkCdconfirmEn ...

  8. Message,MessageQueue,Looper,Handler ——由view.post(runnable想到的)

    近日看到代码有view.post(runable),发现对handler机制又有些模糊,故做些复习. 这里就不再对具体的源码原理做深入复习了,就抄一些基本的结论吧. 1.基本概念 Message:基本 ...

  9. html table 知识点

    第一点就是图片在表格中不能对齐边沿的问题,这是和浏览器的渲染模式相关的,在标准模式中是不能对齐的,除非改变CSS某些样式.而在准标准模式和怪异模式中,默认就是对齐的. 这一特性在以前的表格布局时代是大 ...

  10. Ajax简单应用-购物车

    1. 2. 3. 4. 5. 6.