`
schy_hqh
  • 浏览: 558221 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

(IO)字节流 InputStream OutputStream

 
阅读更多

 

字节流:以字节为单位进行读写,二进制文件:图片,音频,视频等非字符数据只能用字节流来操作。

 

package com.gc.file;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class InputStreamDemo {
	/**
	 * 字节流---底层以byte为单位进行操作
	 * 字符流不能读取字节文件,只能用来读取文本数据
	 * 字符流1次读取2个字节,而字节流1次只读取1个字节
	 * 
	 * 字节流用来处理图片、音频、视频等字节文件
	 * 对于字符文件,使用专门的字符流操作!
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		//以下使用字节流操作文本数据,仅为了演示字节流的用法,真正操作字符数据,请使用Reader和Writer!
		writeFileWithOutputStream();
		readFileWithInputStream();

		copyFileWithBuffer();
		copyFileWithJavaBuffer();
	}
	
	/**
	 * 使用java提供的缓冲区对象进行操作
	 * 很奇怪,如果不自定义一个缓冲区,拷贝很慢
	 * 所以,还是自定义一个缓冲区来使用
	 * 哎,这是为什么呢?
	 * @throws IOException
	 */
	private static void copyFileWithJavaBuffer() throws IOException {
		FileInputStream fis = new FileInputStream("temp\\a.jpg");
		FileOutputStream fos = new FileOutputStream("temp\\b.jpg");
		
		BufferedInputStream bufis = new BufferedInputStream(fis);//缓冲读
		BufferedOutputStream bufos = new BufferedOutputStream(fos);//缓冲写
		
		byte[] bBuf = new byte[1024];//仍然提供外部缓冲区,不然读写很慢
		int len = 0;
		while((len=fis.read(bBuf))!=-1) {
			fos.write(bBuf,0,len);
		}
		bufis.close();//内部会调用fis.close()
		bufos.close();//内部会调用fos.close()
	}

	/**
	 * 自定义缓冲区来操作
	 * @throws IOException
	 */
	private static void copyFileWithBuffer() throws IOException {
		FileInputStream fis = new FileInputStream("temp\\a.jpg");
		FileOutputStream fos = new FileOutputStream("temp\\b.jpg");
		byte[] bBuf = new byte[1024];//操作字节数据,定义字节数组作为缓冲区(而操作字符数据,则定义字符数组作为缓冲区)
		int len = 0;
		while((len=fis.read(bBuf))!=-1) {
			fos.write(bBuf, 0, len);
			//fos.flush();//这里的flush()没有任何用,因为方法的实现为空
		}
		fis.close();
		fos.close();
	}

	private static void readFileWithInputStream() throws FileNotFoundException,
			IOException {
		FileInputStream fis = new FileInputStream("temp\\byte.txt");
		byte[] buf = new byte[1024];
		int len = 0;
		while((len=fis.read(buf))!=-1) {
			System.out.println(new String(buf,0,len));
		}
	}

	private static void writeFileWithOutputStream()
			throws FileNotFoundException, IOException {
		FileOutputStream fis = new FileOutputStream("temp\\byte.txt");
		byte[] b = "hello".getBytes();
		fis.write(b);
		fis.close();
	}
}

 

分享到:
评论

相关推荐

    IO流文档InputStream / OutputStream

    在Java IO System中,流可以分为两种:字节流和字符流。字节流用于读写二进制数据,而字符流用于读写文本数据。Reader和Writer是字符流的抽象超类,它们提供了基本的读取和写入方法。 在IO流中, mark()和reset()...

    Java IO 字节流 字符流

    字节流由InputStream和OutputStream两大类构成,分别用于读取和写入数据。InputStream是所有字节输入流的抽象基类,例如FileInputStream,用于从文件中读取字节;OutputStream则是所有字节输出流的基类,如...

    将输出流OutputStream转化为输入流InputStream的方法

    `OutputStream`是用于写出数据到目的地的流,而`InputStream`则是用于读取数据的流。在Java中,它们是Java.io包下的基础类,提供了多种子类来处理不同类型的输出和输入操作,如`FileOutputStream`和`FileInputStream...

    javaIO字节流读取文件方式总结共4页.pdf.zip

    Java IO字节流是Java平台中用于处理二进制数据的核心API,主要用于文件的读写操作。本资料“javaIO字节流读取文件方式总结共4页.pdf”详细介绍了Java字节流在读取文件时的各种方法和应用场景。本文将深入探讨这些...

    io流详解,字符流和字节流代码

    - **InputStream/OutputStream**:字节输入流和字节输出流是字节流的基类,用于处理所有字节数据的输入和输出。例如,FileInputStream和FileOutputStream分别用于读取和写入文件。 - **FilterStream**:字节过滤流...

    java 文件存储 Inputstream outputstream reader writer的用法

    相对于字节流,字符流在处理文本时会考虑编码问题,例如UTF-8。下面是一个使用`BufferedReader`和`BufferedWriter`的例子: ```java import java.io.*; public class FileReadWrite { public static void main...

    Java IO字符流和字节流

    Java中的`InputStream`和`OutputStream`是所有字节流的基类。 - **`InputStream`**:用于从源设备读取字节数据。 - **`OutputStream`**:用于向目标设备写入字节数据。 ##### 2. 字节流的基本API - **`public int...

    IO流学习(字节流 字符流 文本流)!

    字节流是最基础的IO流类型,分为输入字节流(InputStream)和输出字节流(OutputStream)。它们处理的数据单位是字节,适用于所有类型的数据,包括图片、音频、视频等二进制数据。例如,FileInputStream和...

    JAVA IO流缓冲字节流缓冲字符流等流经典代码示例加注释总结.rar

    2、常用21个IO流:FileWriter、FileReader、CharArrayReader、CharArrayWriter、CharSequence、OutputStreamWriter、FileOutputStream、InputStreamReader、PrintWriter、BufferedReader、InputStream、...

    Java基础核心+InputStream输入流+OutputStream输出流

    InputStream和OutputStream是Java.io包下的抽象类,是所有字节流的基类。InputStream代表字节输入流,而OutputStream则表示字节输出流。在Java中,文件操作通常涉及到数据的读取和写入,这两个类及其子类就提供了...

    IO各种操作文件,字符流、字节流等

    在Java IO中,主要有两种流的概念:字符流(Character Stream)和字节流(Byte Stream)。它们是处理数据的基本方式,适用于不同场景。 字符流主要处理基于字符的数据,如文本文件,它包括Reader和Writer两个抽象...

    IO流 javaio java 流

    Java IO流分为两大类:字符流(Character Stream)和字节流(Byte Stream)。字符流处理单个字符,而字节流处理8位的字节序列。它们又可以进一步细分为输入流(InputStream/Reader)和输出流(OutputStream/Writer)...

    Day20IO流.md

    =分类: 方向 单位== ==单位 方向 输入流 输出流== ==字节流 InputStream OutputStream 主要用来对影像文件或者媒体== ==字符流 Reader Writer 主要用来对文本文件进行操作==

    字节流字符流练习

    Java中的字节流主要由InputStream和OutputStream两大类构成,它们分别代表数据的输入和输出。InputStream是所有字节输入流的基类,包括FileInputStream、BufferedInputStream等;OutputStream则是所有字节输出流的...

    java.io.Reader 和 java.io.InputStream 的区别

    `java.io.Reader`和`java.io.InputStream`是Java标准库中处理输入数据的核心类,它们分别针对字符流和字节流提供了基础的支持。 #### `java.io.Reader`:字符流的读取器 `java.io.Reader`是所有字符输入流的超类。...

    JavaIO字节输出流的总结共6页.pdf.zip

    - Java中的字节流主要由两个基类构成:`java.io.OutputStream`和`java.io.InputStream`。其中,`OutputStream`是所有字节输出流的父类,提供了基本的字节写入方法。 - 字节流主要用于处理二进制数据,如图片、音频...

    java IO 字节流详解及实例代码

    常用的字节流类有 InputStream(字节输入流)和 OutputStream(字节输出流)。 InputStream 是一个抽象类,需要通过子类实例化对象。常用的 InputStream 子类包括 FileInputStream、BufferedInputStream 等。 ...

    JavaIO实例|字节流|字符流|缓冲流|转换流IODemo

    字节流分为输入流(InputStream)和输出流(OutputStream)。例如,FileInputStream和FileOutputStream分别代表文件输入流和文件输出流,它们用于读写文件中的字节数据。字节流适用于任何类型的数据,因为所有数据...

    Java字节流与字符流的介绍.pdf

    字节流的所有读操作都继承自一个公共超类 java.io.InputStream 类。所有的写操作都继承自一个公共超类 java.io.OutputStream 类。InputStream 和 OutputStream 都是抽象类。InputStream 有 6 个低级输入流: 1. ...

Global site tag (gtag.js) - Google Analytics