Java IO详解(三)------字节输入输出流

File 类的介绍:http://www.cnblogs.com/ysocean/p/6851878.html

Java IO 流的分类介绍:http://www.cnblogs.com/ysocean/p/6854098.html

那么这篇博客我们讲的是字节输入输出流:InputStream、OutputSteam(下图红色长方形框内),红色椭圆框内是其典型实现(FileInputSteam、FileOutStream)

  

 1、字节输出流:OutputStream

public abstract class OutputStream
      extends Object
      implements Closeable, Flushable

  这个抽象类是表示字节输出流的所有类的超类。 输出流接收输出字节并将其发送到某个接收器。

  方法摘要:

  

  下面我们用 字节输出流 OutputStream 的典型实现 FileOutputStream 来介绍:

//1、创建目标对象,输出流表示把数据保存到哪个文件。不写盘符,默认该文件是在该项目的根目录下
		File target = new File("io"+File.separator+"a.txt");
		//2、创建文件的字节输出流对象,第二个参数是 Boolean 类型,true 表示后面写入的文件追加到数据后面,false 表示覆盖
		OutputStream out = new FileOutputStream(target,true);
		//3、具体的 IO 操作(将数据写入到文件 a.txt 中)
			/**
			 * void write(int b):把一个字节写入到文件中
			 * void write(byte[] b):把数组b 中的所有字节写入到文件中
			 * void write(byte[] b,int off,int len):把数组b 中的从 off 索引开始的 len 个字节写入到文件中
			 */
		out.write(65); //将 A 写入到文件中
		out.write("Aa".getBytes()); //将 Aa 写入到文件中
		out.write("ABCDEFG".getBytes(), 1, 5); //将 BCDEF 写入到文件中
		//经过上面的操作,a.txt 文件中数据为 AAaBCDEF

		//4、关闭流资源
		out.close();
		System.out.println(target.getAbsolutePath());

  

 2、字节输入流:InputStream

public abstract class InputStream
  extends Object
  implements Closeable

  这个抽象类是表示输入字节流的所有类的超类。

  方法摘要:

  

  下面我们用 字节输出流 InputStream 的典型实现 FileInputStream 来介绍:

  

//1、创建目标对象,输入流表示那个文件的数据保存到程序中。不写盘符,默认该文件是在该项目的根目录下
			//a.txt 保存的文件内容为:AAaBCDEF
		File target = new File("io"+File.separator+"a.txt");
		//2、创建输入流对象
		InputStream in = new FileInputStream(target);
		//3、具体的 IO 操作(读取 a.txt 文件中的数据到程序中)
			/**
			 * 注意:读取文件中的数据,读到最后没有数据时,返回-1
			 * 	int read():读取一个字节,返回读取的字节
			 * 	int read(byte[] b):读取多个字节,并保存到数组 b 中,从数组 b 的索引为 0 的位置开始存储,返回读取了几个字节
			 * 	int read(byte[] b,int off,int len):读取多个字节,并存储到数组 b 中,从数组b 的索引为 0 的位置开始,长度为len个字节
			 */
		//int read():读取一个字节,返回读取的字节
		int data1 = in.read();//获取 a.txt 文件中的数据的第一个字节
		System.out.println((char)data1); //A
		//int read(byte[] b):读取多个字节保存到数组b 中
		byte[] buffer  = new byte[10];
		in.read(buffer);//获取 a.txt 文件中的前10 个字节,并存储到 buffer 数组中
		System.out.println(Arrays.toString(buffer)); //[65, 97, 66, 67, 68, 69, 70, 0, 0, 0]
		System.out.println(new String(buffer)); //AaBCDEF[][][]

		//int read(byte[] b,int off,int len):读取多个字节,并存储到数组 b 中,从索引 off 开始到 len
		in.read(buffer, 0, 3);
		System.out.println(Arrays.toString(buffer)); //[65, 97, 66, 0, 0, 0, 0, 0, 0, 0]
		System.out.println(new String(buffer)); //AaB[][][][][][][]
		//4、关闭流资源
		in.close();

  

3、用字节流完成文件的复制

  

/**
		 * 将 a.txt 文件 复制到 b.txt 中
		 */
		//1、创建源和目标
		File srcFile = new File("io"+File.separator+"a.txt");
		File descFile = new File("io"+File.separator+"b.txt");
		//2、创建输入输出流对象
		InputStream in = new FileInputStream(srcFile);
		OutputStream out = new FileOutputStream(descFile);
		//3、读取和写入操作
		byte[] buffer = new byte[10];//创建一个容量为 10 的字节数组,存储已经读取的数据
		int len = -1;//表示已经读取了多少个字节,如果是 -1,表示已经读取到文件的末尾
		while((len=in.read(buffer))!=-1){
			//打印读取的数据
			System.out.println(new String(buffer,0,len));
			//将 buffer 数组中从 0 开始,长度为 len 的数据读取到 b.txt 文件中
			out.write(buffer, 0, len);
		}
		//4、关闭流资源
		out.close();
		in.close();

  

时间: 2024-10-13 00:02:54

Java IO详解(三)------字节输入输出流的相关文章

Java IO 详解

Java IO 详解 初学java,一直搞不懂java里面的io关系,在网上找了很多大多都是给个结构图草草描述也看的不是很懂.而且没有结合到java7 的最新技术,所以自己来整理一下,有错的话请指正,也希望大家提出宝贵意见. 首先看个图:(如果你也是初学者,我相信你看了真个人都不好了,想想java设计者真是煞费苦心啊!) 这是java io 比较基本的一些处理流,除此之外我们还会提到一些比较深入的基于io的处理类,比如console类,SteamTokenzier,Externalizable接

Java IO详解(六)------序列化与反序列化(对象流)

File 类的介绍:http://www.cnblogs.com/ysocean/p/6851878.html Java IO 流的分类介绍:http://www.cnblogs.com/ysocean/p/6854098.html Java IO 字节输入输出流:http://www.cnblogs.com/ysocean/p/6854541.html Java IO 字符输入输出流:https://i.cnblogs.com/EditPosts.aspx?postid=6859242 Jav

spark2.x由浅入深深到底系列六之RDD java api详解三

学习任何spark知识点之前请先正确理解spark,可以参考:正确理解spark 本文详细介绍了spark key-value类型的rdd java api 一.key-value类型的RDD的创建方式 1.sparkContext.parallelizePairs JavaPairRDD<String, Integer> javaPairRDD =         sc.parallelizePairs(Arrays.asList(new Tuple2("test", 3

Java IO详解

学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:618528494  我们一起学Java! 初学Java,一直搞不懂Java里面的io关系,在网上找了很多大多都是给个结构图草草描述也看的不是很懂.而且没有结合到java7 的最新技术,所以自己来整理一下,有错的话请指正,也希望大家提出宝贵意见. 首先看个图:(如果你也是初学者,我相信你看了真个人都不好了,想想java设计者真是煞费苦心啊!) 这是Java io 比较基本的一些处理流

Java IO详解(转)

IO是Java及众多编程语言很重要的一块,同时很多程序的瓶颈和耗时操作也都在IO这块. 一.简介 IO操作面临很多问题,信息量的巨大,网络的环境等等,因为IO不仅仅是对本地文件.目录的操作,有时对二进制流.还有一部分是网络方面的资源,所以多种原因直接造成IO操作无疑是耗时且复杂多变的.Java对IO的支持是个不断的演变过程,经过了很多的优化,直到JDK1.4以后,才趋于稳定,在JDK1.4中,加入了nio类,解决了很多性能问题,虽然我们有足够的理由不去了解关于Java IO以前的情况,但是为了学

java io详解及各输入输出类介绍

首先要记住Java有一个非常强大的 文件及目录类 File, 这里面你想要的功能都有. 下面进入正题. 由于JavaIO根据装饰器设计模式设计, 设计思想是先给出基本IO类,其他功能如缓存,格式化,再嵌套其他类实现. 在我看来实际上是个失败的设计,不仅没有使类变得简单,由于各种IO类必须组合起来才能发挥作用,反而增大了类的复杂度,写起来也冗余不已. 所以JavaIO类看起来会有些(非常)臃肿. 对于IO根据面向字符还是面向字节可分为两大类. 1. 面向字节的IO都是从InputStream和Ou

Java线程详解(三)

Java线程:新特征-有返回值的线程 在Java5之前,线程是没有返回值的,常常为了"有"返回值,破费周折,而且代码很不好写.或者干脆绕过这道坎,走别的路了. 现在Java终于有可返回值的任务(也可以叫做线程)了. 可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口. 执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object了. 下面是个很简单的例子: import jav

标准文件IO详解(三)---缓冲区详解

标准文件 IO 相比于文件 IO 来说,在用户层中增加了一个用户缓冲区.也就是说在使用标准IO 来操作文件的时候,都会经过此用户层的缓冲区.比如使用标准 IO 来向文件中写入内容的时候,首先内容会首先被写入到用户缓冲区中,等到 缓冲区满 或者 刷新缓冲区 的时候在调用文件 IO 将内容写入到内核中的磁盘缓冲区中. ==================================================== 用户缓冲区的类型: 全缓冲 此种类型的缓冲只有在缓冲区满的时候才会调用实际的文

文件IO详解(三)---Linux虚拟文件系统

http://blog.chinaunix.net/uid-14735472-id-2921377.html 讲解虚拟文件系统的一些数据结构以及之间的关系,有些地方看不懂 http://www.docin.com/p-941544538.html 讲解了进程打开文件时内核所建立的各种数据结构之间的联系 在给磁盘分区后,每个分区中都可以建立起各自独立的文件系统,建立的物理文件系统可以是相同的,也可以是不同的.那么不同的物理文件系统的组织数据的方式肯定是不同的,比如说ext2文件系统组织数据的方式是