java I/O中缓冲功能怎么回事??

如题所述

缓存可以理解为暂时的容器:我们把硬盘比作是存储水的缸:内存就是存储水的盆:缓存就是舀水的碗:水的计量单位是滴。 那样就很好理解了 ! 我们如果一滴一滴水的往硬盘里面放数据是不是很慢。如果一碗一碗的那就快多了!嘎嘎!利用缓冲可以提高输入,输出的速度 不至于读的太多导致应用程序响应迟缓,也不至于写的时候慢的跟乌龟一样!简单说就这样
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-10-20
软件包 java.nio 的描述
  定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。
  NIO API 的集中抽象为:
  缓冲区,它们是数据容器;
  字符集 及其相关解码器 和编码器,
  它们在字节和 Unicode 字符之间进行转换;
  各种类型的通道,它们表示到能够执行 IO 操作的
  实体的连接;以及选择器 和选择键,它们与
  可选择信道 一起定义了多路的、无阻塞的
  I/O 设施。
  java.nio 包定义了缓冲区类,这些类用于所有 NIO API。java.nio.charset 包中定义了字符集 API,java.nio.channels 包中定义了信道和选择器 API。每个子包都具有自己的服务提供程序接口 (SPI) 子包,SPI 子包的内容可用于扩展平台的默认实现或构造替代实现。
  缓冲区
  描述
  Buffer 位置,界限和容量;
  清除,反转,重绕和标记/重置
  ByteBuffer Get/put,压缩,查看;分配,包装
  MappedByteBuffer 映射到文件的字节缓冲区
  CharBuffer Get/put,压缩;分配,包装
  DoubleBuffer ' '
  FloatBuffer ' '
  IntBuffer ' '
  LongBuffer ' '
  ShortBuffer ' '
  ByteOrder 字节顺序的类型安全的枚举
  缓冲区 是一个固定数据量的指定基本类型的数据容器。除内容之外,缓冲区还具有位置 和界限,其中位置是要读写的下一个元素的索引,界限是第一个应该读写的元素的索引。基本 Buffer 类定义了这些属性以及清除、反转 和重绕 方法,用以标记 当前位置,以及将当前位置重置 为前一个标记处。
  每个非布尔基本类型都有一个缓冲区类。每个类定义了一系列用于将数据移出或移入缓冲区的 get 和 put 方法,用于压缩、复制 和切片 缓冲区的方法,以及用于分配 新缓冲区和将现有数组包装 到缓冲区中的静态方法。
  因为字节缓冲区可以用作 I/O 操作的源缓冲区和目标缓冲区,所以可以对它们加以区分。它们还支持其他缓冲区类所没有的几个特性:
  可以将字节缓冲区分配为一个直接 缓冲区,在这种情况下,Java 虚拟机将最大限度地直接在缓冲区上执行本机 I/O 操作。
  可以通过 mapping 将文件区域直接包装到内存中来创建字节缓冲区,在这种情况下,可以使用 MappedByteBuffer 类中定义的几个其他文件相关的操作。
  字节缓冲区提供了对其内容的访问(其内容作为任何非布尔基本类型的异类或同类二进制数据序列),访问要么是以 big-endian 字节顺序进行,要么是以 little-endian 字节顺序进行。
  除非另有说明,否则向此包的任何类或接口中的构造方法或方法传递 null 变量,都会抛出 NullPointerException。
第2个回答  2013-10-20
Java I/O的性能可以使用标准的缓冲类提升,就像操作系统通过缓冲请求提高它的速度一样。例如,如果一段代码要求从磁盘上读取数据,它会试图读取内存中已有的数据;如果代码希望向磁盘写一些东西,它可能在完成写操作前将输出在内存中存放一段时间以等待更多的数据。在Java的I/O系统中,将一个字符写入内存比写到磁盘上快得多。
第3个回答  2013-10-20
I/O缓冲是指 应用程序一次性读入的数据大小 比如 你要读取TXT文本文件 而你的缓冲区设置了1024个字节 那么他每次读取的最大的数据长度就是1024个字节 利用缓冲可以提高读写速度 不至于一次性读入太多的文本导致应用程序等待响应。。。
第4个回答  2013-10-20
这和缓存是一样的道理程序和硬盘交互的时候是很消耗资源的当你往硬盘上写文件时,如果每写个字节就交互一次效率上时很低的所以一般先放在缓存里面,等缓存满了一次性写入硬盘。

Java中IO缓冲区的原理是什么?
如果是边读边写,就会很慢,也伤硬盘。缓冲区就是内存里的一块区域,把数据先存内存里,然后一次性写入,类似数据库的批量操作,这样效率比较高。\\x0d\\x0a\\x0d\\x0a 调用I\\O操作的时候,实际上还是一个一个的读或者写,关键就在,CPU只有一个,不论是几个核心。CPU在系统调用时,会不会还要...

【Java】如何使用 Java 中 缓冲区类 Buffer
如何使用 Java 中 缓冲区类 Buffer1. 什么是Buffer 缓冲区缓冲区(Buffer):就是在内存中预留指定大小的存储空间用来对输入\/输出(I\/O)的数据作临时存储,这部分预留的内存空间就叫做缓冲区 缓冲区本质上是一个可以读写数据的内存块,可以理解成是一个数组,该对象提供了一组方法,可以更轻松地使用内...

Java.IO中 为什么带缓冲的字节输入输出流速度比不带缓冲的速度快
缓冲:就是通过缓冲流操作字节读或写入内存。在内存中就是以流的形式输出。总结:从内存读取数据比从磁盘读取数据要快。

Java程序性能优化-缓冲(Buffer)(1)
缓冲最常用的场景就是提高I\/O的速度 为此 JDK内不少I\/O组件都提供了缓冲功能 比如 当使用FileWriter时 进行文件写操作的代码如下 Writer writer = new FileWriter(new File( file txt ))long begin=System currentTimeMillis()for (int i = ; i < CIRCLE; i++) { writer write(i) ...

java中IO流中用Byte[] b=new Byte[XXX] 把XXX设置大点那为何还要缓冲...
缓存流的作用是数据读取可能并不是马上就读取到,比如服务器一次只返回2个字节, 但是客户端想一直读取到一个 \\n才返回数据, 这时候就要用缓存流比较方便了.

关于java的io读写,缓冲区是如何提高读写效率的???
Java中专门提供提高I\/O效率的缓冲类,这好比在数据读写时提供一个临时缓冲区,每次读取一个缓冲区大小的数据,将这数据库一次性写入目标设备。下图中分别为两种读取方式。举个简单例子,在A地有10000本书需要搬到B地,如果一次搬1本,需要10000次。如果每次取1000本放到一个货车上,运到B地,需要10次...

I\/O源码分析(3)--BufferedOutputStream之秒懂"flush"
BufferedOutputStream,作为与缓冲输入流相对应的面向字节的IO类,其主要功能是通过write方法进行字节写出操作,并在调用flush方法时清除缓存区中的剩余字节。其继承体系主要包括了基本的输出流类,如OutputStream。相较于缓冲输入流,BufferedOutputStream的方法相对较少,但功能同样强大。BufferedOutputStream内部...

java io 中BufferedReader缓冲区提高效率的问题
道理很简单,假设你要读取一个文本文件输出到屏幕,一次读一个字节,然后赋值给声明的一个变量,那么需要读取很多次,如果用了BufferedReader,就可以一次把所有的字节都读取到缓冲区,然后再一次性赋值给变量,效率自然就提高了,写文件时也一样,一次写一个字,和一次写1篇文章的区别....

java写文件怎么减少io压力
从而减少I\/O压力。例如,可以使用BufferedReader和BufferedWriter类来读写文本文件,支持缓冲读写。2、使用NIO:Java的NIO(NewI\/O)功能可以使用非阻塞I\/O操作,使用了I\/O多路复用的机制,可以在一个线程中处理多个I\/O操作,从而减少线程的创建和销毁,降低了I\/O压力。

1. Java I\/O中字符流和字节流的区别?
\/\/ 此时没有关闭 } } 程序运行后会发现文件中没有任何内容,这是因为字符流操作时使用了缓冲区,而在关闭字符流时会强制性地将缓冲区中的内容进行输出,但是如果程序没有关闭,则缓冲区中的内容是无法输出的,所以得出结论:字符流使用了缓冲区,而字节流没有使用缓冲区。如果想在不关闭时...

相似回答