首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java IO 的分类、使用场景、缓冲流、使用例子、文件拷贝

Java程序在执行的时候,是在内存进行的,外部的数据需要读写到内存才能处理;而在内存中的数据是随着程序结束就消失的,有时候我们也需要把数据输出到外部文件。...IOException; //将字符数组 cbuf[] 写到输出流 。...---- 3、使用方法 3.1、FileOutputStream写文件、FileInputStream读文件 分别为 单个字节写、字节数字写、单个字节读取、字节数组读取、一次性读取: public class...在计算机层面,Java对磁盘进行操作,IO是有缓存的,并不是真正意义上的一边读一边写,底层的落盘(数据真正写到磁盘)另有方法。...---- 5、总结 写了这么多,IO确实是挺复杂的,一般的业务需求是读写文件,其实更多的是生成文件、复制文件、移动文件。所以如何选择IO流,是需要我们掌握的。

1.6K51

几种IO流读写文件

.处理异常 //1.指定要写到的文件目录及名称 File file =new File("文件路径"); //2.创建文件读入流对象 FileOutputStream...//1.指定要读 的文件目录及名称 File file =new File("文件路径"); //2.创建文件读入流对象 FileInputStream...ObjectInputStream ,ObjectOutputStream 不同于以上两种类型的流这里只能用字节对对象进行操作原因可以看上篇的编码表比照原理 ObjectOutputStream对象的序列化: 将java...程序中的对象写到本地磁盘里用ObjectOutputStream eg:将Person类的对象序列化到磁盘 1.创建Person类 注1:此类要实现Serializable接口,此接口为标志性接口...new OutputStreamWriter(new "后缀为OutputStream就行"); 六、区别记忆 1.对象流是可以读写几乎所有类型的只要是对象就行,而字节字符流,只能读写单个字节字符或者字节字符数组

86410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    java nio 详_java NIO 详解

    Selectors(选择器):Java NIO引入了选择器的概念,选择器用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个的线程可以监听多个数据通道。...2.4 选择器(Selectors) Java NIO的选择器允许一个单独的线程来监视多个输入通道,你可以注册多个通道使用一个选择器,然后使用一个单独的线程来“选择”通道:这些通道里已经有可以处理的输入...例如, 写到一个指定的位置,或者把一个字节数组写入到Buffer。 更多Buffer实现的细节参考JavaDoc。 flip()方法 flip方法将Buffer从写模式切换到读模式。...这里有两个例子: long pos = channel.position(); channel.position(pos +123); 如果将位置设置在文件结束符之后,然后试图从文件通道中读取数据,读方法将返回...force()方法有一个boolean类型的参数,指明是否同时将文件元数据(权限信息等)写到磁盘上。 下面的例子同时将文件数据和元数据强制写到磁盘上: channel.force(true); 9.

    72520

    java NIO浅析

    Selector用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个线程可以监听多个数据通道。 NIO与IO的主要区别 IO是面向流的,NIO是面向缓冲区的。...Java NIO引入了选择器的概念,选择器用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个的线程可以监听多个数据通道。 缓冲区(Buffer): 为什么说NIO是基于缓冲区的IO方式呢?...4 public final Buffer flip();将缓冲区从写模式切换到读模式 5 public Buffer clear();从读模式切换到写模式,不会清空数据,但后续写数据会覆盖原来的数据,...数据可以从Channel读到Buffer中,也可以从Buffer 写到Channel中。 选择器: Selector允许单线程处理多个 Channel。...通过Selector选择通道 //一旦向Selector注册了一或多个通道,就可以调用几个重载的select()方法。这些方法返回你所感兴趣的事件(如连接、接受、读或写)已经准备就绪的那些通道。

    69520

    (57) 二进制文件和字节流 计算机程序的思维逻辑

    先使用mark方法将当前位置标记下来,在读取了一些字节,希望重新从标记位置读时,调用reset方法。...如果不确定文件内容的长度,不希望一次性分配过大的byte数组,又希望将文件内容全部读入,怎么做呢?可以借助ByteArrayOutputStream。...使用ByteArrayOutputStream,我们可以改进上面的读文件代码,确保将所有文件内容读入: InputStream input = new FileInputStream("hello.txt...这与容器类中要将数组、单个元素转换为容器接口的原因是类似的,有很多代码是以InputStream/OutputSteam为参数构建的,它们构成了一个协作体系,将byte数组转换为InputStream可以方便的参与这种体系...将字节数组写到文件 public static void writeByteArrayToFile(String fileName, byte[] data) throws IOException

    1.4K100

    庖丁解牛:NIO核心概念与机制详解

    您永远不会将字节直接写入通道中,相反,您是将数据写入包含一个或者多个字节的缓冲区。同样,您不会直接从通道中读取字节,而是将数据从通道读入缓冲区,再从缓冲区获取这个字节。...Demo : 读写结合 下面我们将看一下在结合读和写时会有什么情况。 我们以一个名为 CopyFile.java 的简单程序作为这个练习的基础,它将一个文件的所有内容拷贝到另一个文件中。...CopyFile.java 执行三个基本操作: 首先创建一个 Buffer 然后从源文件中将数据读到这个缓冲区中 然后将缓冲区写入目标文件。...这个程序不断重复 ― 读、写、读、写 ― 直到源文件结束。...fcin 中读入缓冲区,第二行将这些数据写到输出通道 fcout 。

    24450

    ?【Alibaba中间件技术系列】「RocketMQ技术专题」服务底层高性能存储设计分析

    ,通过操作该类,可以把消息字节写入PageCache缓存区(commit),或者原子性地将消息持久化的刷盘(flush);RocketMQ消息架构集群有一个Broker,Topic为binlog的队列(...Consume Queue则是用于将消息均衡地按序排列在不同的逻辑队列,集群模式下多个消费者就可以并行消费Consume Queue的消息。...MappedFile 所有的topic数据都写到同一个文件中,文件的大小默认为1G,使用mmap与磁盘文件做映射,初始化时使用mlock将内存锁定,防止pagecache被os交换到swap区域。...- 对于每类大文件(IndexFile/ConsumerQueue/CommitLog),在存储时分隔成多个固定大小的文件(单个IndexFile文件大小约为400M、单个ConsumerQueue文件大小约...开启堆外内存池的好处:写消息时先写到堆外内存,纯内存操作非常快。读消息时是从pagecache中读,相当于实现了读写分离,但是会存在延时性机制问题,以及对外内存宕机了会丢失,数据一致性会存在问题。

    72621

    史上最强Java NIO入门:担心从入门到放弃的,请读这篇!

    CopyFile.java 执行三个基本操作:首先创建一个 Buffer,然后从源文件中将数据读到这个缓冲区中,然后将缓冲区写入目标文件。这个程序不断重复 ― 读、写、读、写 ― 直到源文件结束。...fcin 中读入缓冲区,第二行将这些数据写到输出通道 fcout 。...仅只是改变数组的单个元素这样的简单操作,就可能会直接修改磁盘上的文件。修改数据与将数据保存到磁盘是没有分开的。 8.8 将文件映射到内存 了解内存映射的最好方法是使用例子。...9、分散和聚集 9.1 概述 分散/聚集 I/O 是使用多个而不是单个缓冲区来保存数据的读写方法。 一个分散的读取就像一个常规通道读取,只不过它是将数据读到一个缓冲区数组中而不是读到单个缓冲区中。...不过它有一个附加的特性,就是它能同时监听多个端口,并处理来自所有这些端口的连接。并且它只在单个线程中完成所有这些工作。

    75130

    史上最强Java NIO入门:担心从入门到放弃的,请读这篇!

    CopyFile.java 执行三个基本操作:首先创建一个 Buffer,然后从源文件中将数据读到这个缓冲区中,然后将缓冲区写入目标文件。这个程序不断重复 ― 读、写、读、写 ― 直到源文件结束。...fcin 中读入缓冲区,第二行将这些数据写到输出通道 fcout 。...仅只是改变数组的单个元素这样的简单操作,就可能会直接修改磁盘上的文件。修改数据与将数据保存到磁盘是没有分开的。 8.8 将文件映射到内存 了解内存映射的最好方法是使用例子。...9、分散和聚集 9.1 概述 分散/聚集 I/O 是使用多个而不是单个缓冲区来保存数据的读写方法。 一个分散的读取就像一个常规通道读取,只不过它是将数据读到一个缓冲区数组中而不是读到单个缓冲区中。...不过它有一个附加的特性,就是它能同时监听多个端口,并处理来自所有这些端口的连接。并且它只在单个线程中完成所有这些工作。

    84740

    攻破JAVA NIO技术壁垒

    Selector(选择区)用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个线程可以监听多个数据通道。...Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方。此外,它不能前后移动流中的数据。如果需要前后移动从流中读取的数据,需要先将它缓存到一个缓冲区。...通过Selector选择通道 一旦向Selector注册了一或多个通道,就可以调用几个重载的select()方法。这些方法返回你所感兴趣的事件(如连接、接受、读或写)已经准备就绪的那些通道。...聚集(gather)写入Channel是指在写操作时将多个buffer的数据写入同一个Channel,因此,Channel 将多个Buffer中的数据“聚集(gather)”后发送到Channel。...Pipe java NIO 管道是2个线程之间的单向数据连接。Pipe有一个source通道和一个sink通道。数据会被写到sink通道,从source通道读取。 ? ?

    87070

    Java基础之IO流(三)

    然后再调用刷新功能,或者关闭流,或者缓冲区存满后会把缓冲区中的字节数据使用字节流写到指定的文件中 InputStreamReader类 它使用指定的字符编码表读取字节并将其解码为字符。...,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入 /** * BufferedWriter 字符缓冲输出流 * 方法 * public void newLine()写入一个行分隔符 *...File开头 内存: 数组、字符串 键盘: System.in 网络: Socket 目的设备 硬盘 : 文件 File开头 内存 :数组,字符串 屏幕 : System.out 网络 :Socket...一次读一个数组数据的方法 readLine() 一次读一行字符串的方法(BufferedReader类特有方法) readObject() 从流中读取对象(ObjectInputStream特有方法)...写数据方法 write(int) 一次写一个字节或字符到文件中 write(byte[] char[]) 一次写一个数组数据到文件中 write(String) 一次写一个字符串内容到文件中 writeObject

    41730

    Netty之JavaNIO编程模型介绍01

    Selector(选择器)用于监听多个通道的事件(比如:连接请求,数据到达等),因此使用单个线程就可以监听多个客户端通道 三、NIO三大核心   下图描述了 Buffer,Channel,Selector...实例2-本地文件读数据 package com.dpb.netty.nio; import java.io.File; import java.io.FileInputStream; import java.nio.ByteBuffer...可以将一个普通Buffer 转成只读Buffer [举例说明] NIO 还提供了 MappedByteBuffer, 可以让文件直接在内存(堆外的内存)中进行修改, 而如何同步到文件由NIO 来完成....前面我们讲的读写操作,都是通过一个Buffer 完成的,NIO 还支持 通过多个Buffer (即 Buffer 数组) 完成读写操作,即 Scattering 和 Gathering 3.3 选择器...可以用一个线程,处理多个的客户端连接,就会使用到Selector(选择器)   Selector 能够检测多个注册的通道上是否有事件发生(注意:多个Channel以事件的方式可以注册到同一个Selector

    44250

    简单的Writer和ReaderWriter的主要方法Writer工作原理Reader的主要方法readLine():String

    Writer用于写出去到文件中,Reader用于将外面的文件读进来控制台 Writer和Reader有许多子类,但是子类大多都是直接运用父类Writer和Reader的方法,而且Writer和Reader...String\char append(xxxxx):Writer xxxx=String 这两个方法没有什么不同 3.刷新 flush():void 刷新了之后才能把储存在流中的数据写到文件中...,随着刷新而将缓冲区中的数据输入到文件中,刷新后缓冲区清空。...,角标会自动往下移,当到达末尾时返回-1 read(char[] array)=int 读取单个字符,角标会自动往下移,array需要定义长度,当到达末尾时返回-1,否则返回读入数据的个数...,反之储存进入数组 package mypackage; import java.util.*; import java.io.*; public class MyBufferedReader{

    85750

    Spark性能优化总结

    ---- 开发调优 避免创建重复的RDD 比如多次读可以persist;但如果input太大,persist可能得不偿失 尽可能复用同一个RDD 但是如果rdd的lineage太长,最好checkpoint...client向YARN的ResourceManager/RM申请启动ApplicationMaster/AM(单个应用程序/作业的资源管理和任务监控) RM收到请求后,在集群中选择一个NodeManager...不会为每个reducer task生成一个单独的文件,而是会将所有的结果写到一个文件里,同时会生成一个index文件,reducer可以通过这个index文件取得它需要处理的数据M 1.4 引入Tungsten-Sort...Based Shuffle 亦称unsafeShuffle,将数据记录用序列化的二进制方式存储,把排序转化成指针数组的排序,引入堆外内存空间和新的内存管理模型 1.6 Tungsten-sort并入Sort...B.distinct()).distinct() 用broadcast + filter来代替join spark.shuffle.file.buffer 设置shuffle write task的buffer大小,将数据写到磁盘文件之前

    1.4K30

    初识 HBase

    它使用Java编写,需运行于HDFS文件系统之上。HBase与Hadoop中的其他组件一样,可以运行在廉价硬件上,并可提供数10亿行 X 数百万列的大数据存储、管理能力,以及随机访问和实时读/写能力。...,存储的是文件类型的数据 HBase是面向随机访问和实时读写模式,其类型为数据库服务,存储的是非结构化和半结构化的松散数据 HBase 使用 HDFS 作为底层的文件系统,HBase 的数据最终会写到...MemStore缓存里的内容刷写到磁盘的StoreFile文件中,清空缓存,并在Hlog里面写入一个标记 每次刷写都生成一个新的StoreFile文件,因此,每个Store包含多个StoreFile文件...每个Region服务器都有一个自己的HLog 文件,每次启动都检查该文件,确认最近一次执行缓存刷新操作之后是否发生新的写入操作;如果发现更新,则先写入MemStore,再刷写到StoreFile,最后删除旧的...MultiWAL可以让RegionServer同时写多个WAL并行的,通过HDFS底层的多管道,最终提升总的吞吐量,但是不会提升单个Region的吞吐量。

    87920

    Java基础入门笔记08——文件流,IO流,FileIputStream类,FileOutputStream类,缓冲流,转换流,标准输入输出流,打印流,数据流,对象流,随机存储流

    当多个网页引用同一个文件时,所使用的路径都是相同的。 **相对路径:**舍去磁盘盘符、计算机名等信息,以引用文件的网页所在文件夹位置为参考,建立出的基准根目录。...所以需要01限制从文件中读到字节数组中的长度,或者02限制后面把字节数组转换为字符串的长度,可以用read方法获取到读的长度,以这个长度来做限制。...,将某文件字节流对象中的字节读入到数组b中,同时此方法会返回读到的字节数,当返回-1表示文件读到头了(常用来判断文件是否读完了) mark(),reset()——读到某一个地方可以打标记mark,...white(byte b[])——输出字节数组 flush()——把数据从内存缓冲区冲写到硬盘 ---- 小练习: 编写一个程序,把一个文件复制到指定文件夹下 思路:写一个静态文件节流拷贝方法..."; //将字符串s转换为byte数组写入内存中 bo.write(s.getBytes()); //将内存文件冲入硬盘 bo.flush

    1.5K40

    NIO之Buffer解读

    任何未读的数据都被移到缓冲区的起 始处,新写入的数据将放到缓冲区未读数据的后面。...例如, 写到一个 指定的位置,或者把一个字节数组写入到 Buffer flip()方法  flip 方法将 Buffer 从写模式切换到读模式。...I/O 内存映射文件 I/O 是一种读和写文件数据的方法,它可以比常规的基于流或者基于通道的 I/O 快的多。...内存映射文件 I/O 是通过使文件中的数据出现为 内存数组的内容来 完成的,这其初听起来似乎不过就是将整个文件读到内存中,但是事实上并不是这样。...http://tutorials.jenkov.com/java-performance/resizable-array.html 另一种思路是用多个数组组成 buffer,一个数组不够,把多出来的内容写入新的数组

    20120

    java学习笔记(基础篇)—IO流

    二:流的分类 1)根据流操作的方向,参照物:当前程序 ​ a)输入流:将数据读取到程序中就是输入流,reader ​ b)输出流:将程序中的数据写出到文件中就是输出流。...字符流处理的单元为 2 个字节的 Unicode 字符,可以操作字符、字符数组或字符串Java内用Unicode 编码存储字符,字符流处理类负责将外部的其他编码的字符流和java内Unicode 字符流之间的转换...在从文件或键盘读数据时,采用后面两个read方法可以减少进行物理读文件或键盘的次数,因此能提高I/O操作的效率。...在向文件或控制台写数据时,采用后面两个write方法可以减少进行物理读文件或键盘的次数,因此能提高I/O操作的效率。...通过带缓冲区的输出流写数据时,数据先保存在缓冲区中,积累到一定程度才会真正写到输出流中。缓冲区通常用字节数组实现,实际上是指一块内存空间。flush()方法强制把缓冲区内的数据写到输出中。

    83610

    IO流总结

    这里总结从外存读取数据到内存以及将数据从内存写到外存中。对于内存和外存的理解,我们可以简单的理解为容器,即外存是一个容器,内存又是另外一个容器。...6)public long length( ) 获取文件的长度 7)public String[ ] list ( ) 将目录中所有文件名保存在字符串数组中返回。...1. public void write(byte b[ ]):将参数b中的字节写到输出流。   ...在将整个文件读取完成或写入完毕的过程中,这么一个byte数组通常被当作缓冲区,因为这么一个byte数组通常扮演承接数据的中间角色。 ? 作用:以文件作为数据输入源的数据流。...BufferedInputStream:当向缓冲流写入数据时候,数据先写到缓冲区,待缓冲区写满后,系统一次性将数据发送给输出设备。

    1.3K70
    领券