「java文件缓冲区」java文件缓存

博主:adminadmin 2022-11-27 02:03:06 46

本篇文章给大家谈谈java文件缓冲区,以及java文件缓存对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java中如何使用缓冲区对文件进行读写操作?

首先,了解下什么是缓冲区:

电脑内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。

栈——就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。

堆——就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete.如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。

自由存储区——就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。

全局/静态存储区——全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。

常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改)

电脑缓冲区就是预留下来的做为急用的那一部分,为暂时置放输出或输入资料的内存。

如何对缓冲区进行操作:

当我们读写文本文件的时候,采用Reader是非常方便的,比如FileReader,InputStreamReader和BufferedReader。其中最重要的类是InputStreamReader, 它是字节转换为字符的桥梁。你可以在构造器重指定编码的方式,如果不指定的话将采用底层操作系统的默认编码方式,例如GBK等。使用FileReader读取文件:

FileReader fr = new FileReader("ming.txt");

int ch = 0;

while((ch = fr.read())!=-1 )

{

System.out.print((char)ch);

}

其中read()方法返回的是读取得下个字符。当然你也可以使用read(char[] ch,int off,int length)这和处理二进制文件的时候类似。

事实上在FileReader中的方法都是从InputStreamReader中继承过来的。read()方法是比较好费时间的,如果为了提高效率我们可以使用BufferedReader对Reader进行包装,这样可以提高读取得速度,我们可以一行一行的读取文本,使用readLine()方法。

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("ming.txt")));

String data = null;

while((data = br.readLine())!=null)

{

System.out.println(data);

}

了解了FileReader操作使用FileWriter写文件就简单了,这里不赘述。

Eg.我的综合实例:

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStreamReader;

public class testFile {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

// file(内存)----输入流----【程序】----输出流----file(内存)

File file = new File("d:/temp", "addfile.txt");

try {

file.createNewFile(); // 创建文件

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

// 向文件写入内容(输出流)

String str = "亲爱的小南瓜!";

byte bt[] = new byte[1024];

bt = str.getBytes();

try {

FileOutputStream in = new FileOutputStream(file);

try {

in.write(bt, 0, bt.length);

in.close();

// boolean success=true;

// System.out.println("写入文件成功");

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

try {

// 读取文件内容 (输入流)

FileInputStream out = new FileInputStream(file);

InputStreamReader isr = new InputStreamReader(out);

int ch = 0;

while ((ch = isr.read()) != -1) {

System.out.print((char) ch);

}

} catch (Exception e) {

// TODO: handle exception

}

}

}

关于JAVA文件缓冲区的问题。

BufferedReader br = null;

try{

InputStream is = new FileInputStream(fileName);

Reader reader = new InputStreamReader(is);

br = new BufferedReader(reader);

//创建BufferedReader目的就是使用这个readLine()方法;

//这个方法的好处就是一次性读取一行的字符内容;

//判断读取的是否是一行根据最后的"\n""\r"来判断;

//读取到"\n""\r"就表示换行;也就执行完成一次读取;

//循环读取,直到返回为null的时候表示读取文件完成;

String data = "";

while(true){

data = br.readLine();

if(data == null){

//如果data为null说明读取完成,跳出循环;

break;

}

System.out.println(data);

JAVA文件流的缓冲区是怎么?

缓冲区其实就是个字节数组

如果一个文件很大,比如1G

如果直接写入内存而此时你的内存不足1G,那么就会内存溢出。当然即使不溢出也不应该把很大的文件直接加载在内存中

这时就用到了buffer,new一个4096长度的字节数组只需要占用4KB的内存,通过循环读写就可以把1G的文件写入目标,这样做不仅节约了内存,而且相对来说高效

Javaio缓冲区为什么不直接开辟大空间

Javaio缓冲区不直接开辟大空间原因:有效地管理系统资源,方便用户使用的程序集合。(操作系统是加在裸机上的第一层软件,是用户与计算机的接口)。

当BufferedReader在读取文本文件时,会先尽量从文件中读入字符数据并置入缓冲区,如果缓冲区数据不足,才会再从文件中读取。这里的缓冲区应该是在硬盘中。

使用BufferedWriter时,写入的数据并不会先输出到目的地,而是先存储至缓冲区中。如果缓冲区中的数据满了,才会一次对目的地进行写出。这里的缓存区应该在内存中。

原理:

Java把这些不同来源和目标的数据都统一抽象为数据流。Java语言的输入输出功能是十分强大而灵活的,美中不足的是看上去输入输出的代码并不是很简洁,因为你往往需要包装许多不同的对象。

在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流。

关于java文件缓冲区和java文件缓存的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-11-27,除非注明,否则均为首码项目网原创文章,转载请注明出处。