package filereader;
import java.io.IOException;
import java.io.InputStream;
import java.nio.channels.FileChannel;
import java.util.Arrays;
public class FileReader {
public static int SIZE = 1024 * 1024 * 5;
public static String FILENAME = "homeuser.unl";
public static long bt;
/**
* @param args
*/
public static void main(String[] args) {
try {
bt = System.currentTimeMillis();
InputStream is = FileReader.class.getResourceAsStream(FILENAME);
readFile(is);
System.out.println(System.currentTimeMillis()-bt+":MS");
} catch (Exception e) {
e.printStackTrace();
}
}
public static void readFile(InputStream is) throws IOException {
byte[] buffer = new byte[SIZE];
StringBuffer sb = new StringBuffer();
int r = 0;
int i = 0;
while (is.available() > 0) {
i++;
String partContent = readPartFile(is, buffer, SIZE, sb);
sb = null;
//System.out.println(i + "\n" + partContent);
}
System.out.println("I: " + i);
}
public static String readPartFile(InputStream inputStream, byte[] buffer,
int size, StringBuffer sb) {
try {
InputStream is = inputStream;
int r = is.read(buffer);
if (r == size) {
byte[] other;
int count = 0;
byte n = (byte) is.read();
other = new byte[] { n };
sb.append(new String(buffer));
sb.append(new String(other));
while (n != 10 && n != -1) {
count++;
n = (byte) is.read();
other = new byte[] { n };
sb.append(new String(other));
}
if (count != 0) {
SIZE += count;
}
System.out.println("COUNT: " + count);
} else {
if (null == sb)
sb = new StringBuffer();
zjRead(r, sb, buffer);
}
return sb.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
private static void zjRead(int r, StringBuffer sb, byte[] buffer) {
byte[] temp = new byte[r];
System.arraycopy(buffer, 0, temp, 0, r);
sb.append(new String(temp));
}
}
分享到:
相关推荐
linnux下可用标准C接口,分块读取文件,可编译 .so文件
用c++实现了多进程对文件的分块读取,并把读取的内容通过c++库函数对LINUX下的命令进行了系统调用
一个用C语言实现的分块读取文件程序,能有效的解决读取较大文件时间过久的问题
本文实例讲述了Python多进程分块读取超大文件的方法。分享给大家供大家参考,具体如下: 读取超大的文本文件,使用多进程分块读取,将每一块单独输出成文件 # -*- coding: GBK -*- import urlparse import datetime...
此外,文章提到了编码转换,这是因为在读写文件时,涉及到文本数据和字节数据之间的转换。示例中使用了UTF8编码,这是因为UTF8编码是一种广泛使用的字符编码,它既支持ASCII字符集,也支持大多数国家的字符集。 ...
前端Javascript+Html5+后端PHP分块上传文件,PHP分块上传大文件,该项目可以正常运行,入口为index.html,需要正确配置fileDir的读写权限 目前有测试过上传1.5G左右的没有问题(未测试更大的文件),理论上更大的...
利用GDAL分块读取大图像,例子是计算一个栅格图像的NDVI值,采用分块读取的方法。
本文实例为大家分享了python多线程分块读取文件的具体代码,供大家参考,具体内容如下 # _*_coding:utf-8_*_ import time, threading, ConfigParser ''' Reader类,继承threading.Thread @__init__方法初始化 @run...
### Python多线程不加锁分块读取文件的方法 #### 概述 在进行文件处理时,特别是在处理大型文件时,使用多线程技术能够显著提高程序的执行效率。然而,多线程环境下文件的读取操作如果不加以适当管理,则可能会...
### Python读写文件方法读取各种类型文件 #### 一、概述 在Python编程中,对文件的操作是一项基本且重要的技能。无论是简单的文本文件还是复杂的二进制文件,Python都提供了丰富的工具和方法来帮助开发者高效地...
在这个改进版本中,我们使用了一个循环来分块读写文件,这样可以有效降低内存占用,适合处理大型文件。 总结,Delphi中的`TFileStream`提供了方便的文件流操作,通过它我们可以高效地读取、写入文件。结合字节数组...
Python提供了分块读取文件的方法,如使用`open()`函数的`readline()`、`readlines()`或`for`循环配合`file对象`来逐行读取。这样可以有效控制内存使用,避免因文件过大导致的问题。 2. **使用`itertools.islice()`*...
GDAL还提供了一种称为内存映射的技术,它可以将磁盘上的图像文件映射到内存中,如同文件已经全部加载到内存一样,但实际只是在需要时才从磁盘读取数据。这种方法极大地提高了数据访问效率,尤其是在处理大规模图像时...
对于大文件,一次性读取可能导致内存压力过大,此时可以采用逐行读取或分块读取策略。例如,使用`for line in file:`迭代文件对象,每次只处理一行。 六、并发读取 在多线程或多进程环境中,多个线程或进程同时...
在上述代码中,我们创建了一个固定大小的缓冲区,并在循环中分块读写文件。这确保了即使文件非常大,也不会一次性加载所有数据到内存。 在实际应用中,还需要考虑错误处理和异常安全。例如,当打开文件失败、读写...
一种常用的方法是使用`InputStream`和`BufferedReader`来分块读取文件,而不是一次性加载整个文件到内存中。 以下是一个示例代码,演示了如何分块读取TXT文件: ```java public void readFile(String filePath) { ...
2. **分块读取**:利用上面介绍的方法分块读取文件。 3. **数据提取**:根据日志文件的具体格式提取所需数据。 4. **数据处理**:对提取的数据进行统计分析。 5. **生成报告**:将结果整理成报表形式,例如使用`...
通过libcurl,我们可以轻松实现文件的分块读取和上传,同时它还支持错误处理和重试机制,提高了文件传输的可靠性。 在分块上传的过程中,程序首先会将大文件分割成若干个小块(通常根据网络状况和服务器限制来确定...
分块读取Blob字段是优化大量数据传输的有效策略,避免一次性加载大文件导致内存压力过大。 首先,`createTable.sql` 文件可能包含了创建包含Blob字段的Oracle表的SQL语句。通常,这样的语句会类似于: ```sql ...