图文详解Java中的字节输入与输出流

目录
  • 字节输入流
    • 字节输入流结构图
    • FileInputStream类
    • 构造方法:
    • 常用读取方法:
  • 字节输出流
    • 字节输出流结构图:
    • FileOutputStream类
    • 构造方法:
    • 常用写入方法:
  • 总结

字节输入流

java.io.InputStream抽象类是所有字节输入流的超类,将数据从文件中读取出来。

字节输入流结构图

在Java中针对文件的读写操作有一些流,其中介绍最常见的字节输入流。

FileInputStream类

FileInputStream流被称为字节输入流,对文件以字节的形式读取操作,例如文字,图片等。

构造方法:

  • FileInputStream(File file) ;通过File文件对象创建
  • FileInputStream(String name) ;通过一个文件路径字符串创建

常用读取方法:

read() 方法,从文件的第一个字节开始读取,每执行一次就读取一个字节,如果文件为空,则读取返回-1,挨个字节读取对于中文字符会出现乱码。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class dome2{
	public static void main(String[] args){
	  File file=new File("D:/.../...txt");   //创建file对象
	  FileInputStream fi=null;
	 try {
		 fi=new FileInputStream(file);   //创建字节输入流

		 int read;   

		 while((read=fi.read())!=-1) {   //数据不为空的情况下循环读取
			 System.out.print((char)read);   //将读取的数据打印
		 }
	} catch (FileNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}finally {
		if(fi!=null) {
			try {
				fi.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

   }
}

read(byte[] b) ,从此输入流中读取b.length个字节的数据读入到byte数组中,针对中文字符读取产生乱码,需要编码,如果记事本存储的汉字是什么格式的就在读取的时候改成什么格式,例如我现在记事本的编码格式是ANSI,在读取的时候就是按照ANSI或者gbk编码格式读取。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class dome2{
	public static void main(String[] args){
	  File file=new File("D:/../...txt");   //创建file对象
	  FileInputStream fi=null;
	 try {
		 fi=new FileInputStream(file);   //创建字节输入流

		 int read;
		 byte[] bytes=new byte[1024];  //创建一个数组,讲读取的字节存入数组
		 while((read=fi.read(bytes))!=-1) {   //数据不为空的情况下循环读取
			 System.out.print(new String(bytes,0,read,"gbk"));   //将读取的数据按字符串打印
		 }
	} catch (FileNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}finally {
		if(fi!=null) {
			try {
				fi.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

   }
}
方法名 说明
void close() 关闭此文件输入流并释放关于此流有关的所有系统资源
int read(byte[] b, int off, int len) 从此输入流中将len个字节的数据读入到byte数组中
int available() 返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取(或跳过)的估计剩余字节数。
long skip(long n) 从输入流中跳过并丢弃 n 个字节的数据。

字节输出流

java.io.OutputStream抽象类是所有字节输出流的超类,该类用于对文件写入数据。

字节输出流结构图:

FileOutputStream类

FileOutputStream类是向文件中以字节的形式写入数据,例如图像和图片等。

构造方法:

  1. FileOutputStream(File file);通过一个file对象表示的文件创建一个字节输出流。
  2. FileOutputStream(File file, boolean append);通过一个file对象表示的文件创建一个字节输出流,append表示追加,true代表往后追加,false则要全部覆盖,文件里只存留刚写入的数据。
  3. FileOutputStream(String name);通过一个指定路径名字符串创建一个字节输出流对象。
  4. FileOutputStream(String name, boolean append);通过一个指定路径字符串创建一个字节输出流对象,append同上。

常用写入方法:

  1. write(byte[] b); 将b.length个字节从指定的byte数组中写入到此输出流中。
  2. write(byte[] b, int off, int len); 将指定的byte数组从偏移量off开始到len个字节写入到此输出流中。
  3. write(int b); 将指定字节写入到此输出流中。
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class dome2{
	public static void main(String[] args){
	  File file=new File("D:/hello.txt");   //创建file对象
	  FileOutputStream fo=null;

	  try {
		fo=new FileOutputStream(file);
		String str="你好,java!";
		byte[] bytes=str.getBytes();
		fo.write(bytes);
	} catch (FileNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}finally {
		if(fo!=null) {
			try {
				fo.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

   }
}

总结

到此这篇关于Java中字节输入与输出流的文章就介绍到这了,更多相关Java字节输入与输出流内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java输入输出流的使用详细介绍

    1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列.Java的I/O流提供了读写数据的标准方法.任何Java中表示数据源的对象都会提供以数据流的方式读写它的数据的方法. Java.io是大多数面向数据流的输入/输出类的主要软件包.此外,Java也对块传输提供支持,在核心库 java.nio中采用的便是块IO. 流IO的好处是简单易用,缺点是效率较低.块IO效率很高,但编程比较

  • java文件输出流写文件的几种方法

    java文件输出流是一种用于处理原始二进制数据的字节流类.为了将数据写入到文件中,必须将数据转换为字节,并保存到文件. 复制代码 代码如下: package com.yiibai.io; import java.io.File;import java.io.FileOutputStream;import java.io.IOException; public class WriteFileExample { public static void main(String[] args) { Fil

  • 浅谈JAVA中输入输出流实例详解

    java语言的输入输出功能是十分强大而灵活的,美中不足的是看上去输入输出的代码并不是很简洁,因为你往往需要包装许多不同的对象.在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流....本文的目的是为大家介绍JAVA中输入输出流实例详解. 流的层次结构 定义:        java将读取数据对象成为输入流,能向其写入的对象叫输出流.结构图如下: 1.输入输出: 输入/输出(Input/Output)是指对某

  • java 对象输入输出流读写文件的操作实例

    java 对象输入输出流读写文件的操作实例 java 支持对对象的读写操作,所操作的对象必须实现Serializable接口. 实例代码: package vo; import java.io.Serializable; public class Animal implements Serializable { private static final long serialVersionUID = 1L; private String name; private Integer weight;

  • Java和C#输入输出流的方法(详解)

    1,Java中操作方法: import java.io.*; public class FileInputStreamTest { public static void main(String[] args) throws IOException { //创建字节输入流 FileInputStream fis = new FileInputStream("FileInputStreamTest.java"); //创建一个长度为1024的竹筒 byte[] bbuf = new byt

  • Java输入输出流实例详解

    本文实例讲述了Java输入输出流.分享给大家供大家参考,具体如下: 字节输出流,输出到文件中(写) OutputStream抽象类 选好文件 复制代码 代码如下: File file = new File("E:" + File.separator + "myFile" + File.separator + "test" + File.separator + "123.txt"); 子类实例化,需要抛异常 稍后传输的数据覆盖原

  • java实现输入输出流代码分享

    1,编写一个程序,读取文件test.txt的内容并在控制台输出.如果源文件不存在,则显示相应的错误信息. package src; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class Test { public static void main(String[] args) { File f =

  • 图文详解Java中的字节输入与输出流

    目录 字节输入流 字节输入流结构图 FileInputStream类 构造方法: 常用读取方法: 字节输出流 字节输出流结构图: FileOutputStream类 构造方法: 常用写入方法: 总结 字节输入流 java.io.InputStream抽象类是所有字节输入流的超类,将数据从文件中读取出来. 字节输入流结构图 在Java中针对文件的读写操作有一些流,其中介绍最常见的字节输入流. FileInputStream类 FileInputStream流被称为字节输入流,对文件以字节的形式读取

  • 图文详解Java中的序列化机制

    目录 概述 对象序列化和反序列化机制 修改默认的序列化机制 使用transient关键字 自定义readObject.writeObject方法 实现Externalizable接口 serialVersionUID的作用 使用序列化clone 概述 java中的序列化可能大家像我一样都停留在实现Serializable接口上,对于它里面的一些核心机制没有深入了解过.直到最近在项目中踩了一个坑,就是序列化对象添加一个字段以后,使用方系统报了反序列化失败,原因是我们双方的序列化对象没有加上seri

  • 详解Java中的字节码增强技术

    目录 1.字节码增强技术 2.常见技术 3.ASM 3.1 测试 Main 3.2 测试 CustomerClassVisitor 3.3 测试 Test 1.字节码增强技术 字节码增强技术就是一类对现有字节码进行修改或者动态生成全新字节码文件的技术. 参考地址 2.常见技术 技术分类 类型 静态增强 AspectJ 动态增强 ASM.Javassist.Cglib.Java Proxy 3.ASM <dependency> <groupId>org.ow2.asm</gro

  • 图文详解Java中class的初始化顺序

    class的装载 在讲class的初始化之前,我们来讲解下class的装载顺序. 以下摘自<Thinking in Java 4> 由于Java 中的一切东西都是对象,所以许多活动 变得更加简单,这个问题便是其中的一例.正如下一章会讲到的那样,每个对象的代码都存在于独立的文件中.除非真的需要代码,否则那个文件是不会载入的.通常,我们可认为除非那个类的一个对象构造完毕,否则代码不会真的载入.由于static 方法存在一些细微的歧义,所以也能认为"类代码在首次使用的时候载入".

  • 详解Java中ByteArray字节数组的输入输出流的用法

    ByteArrayInputStream 介绍 ByteArrayInputStream 是字节数组输入流.它继承于InputStream. 它包含一个内部缓冲区,该缓冲区包含从流中读取的字节:通俗点说,它的内部缓冲区就是一个字节数组,而ByteArrayInputStream本质就是通过字节数组来实现的. 我们都知道,InputStream通过read()向外提供接口,供它们来读取字节数据:而ByteArrayInputStream 的内部额外的定义了一个计数器,它被用来跟踪 read() 方

  • 详解Java中的println输入和toString方法的重写问题

    目录 println()直接打印 toString的使用 其他的一些情况 println()直接打印 我们都知道println()如果打印的是基本数据类型的话直接打印出来的就是值,你如果是引用数据类型呢? 除掉这四类八种基本类型,其它的都是对象,也就是引用类型,包括数组. 让我们来测试一下 public class test1 { public static void main(String[] args) { int[] ret = {1, 2, 3, 4}; System.out.print

  • 详解Java中的hashcode

    一.什么是hash Hash,一般翻译做散列.杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值.简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数. 这个说的有点官方,你就可以把它简单的理解为一个key,就像是map的key值一样,是不可重复的. 二.hash有什么用?,

  • 详解Java中String类的各种用法

    目录 一.创建字符串 二.字符.字节与字符串的转换 1.字符与字符串的转换 2.字节与字符串的转换 三.字符串的比较 1.字符串常量池 2.字符串内容比较 四.字符串查找 五.字符串替换 六.字符串拆分 七.字符串截取 八.String类中其它的常用方法 九.StringBuffer 和 StringBuilder 1.StringBuilder与StringBuffer的区别 2.StringBuilder与StringBuffer常用的方法 十.对字符串引用的理解 一.创建字符串 创建字符串

  • 一文详解Java中的类加载机制

    目录 一.前言 二.类加载的时机 2.1 类加载过程 2.2 什么时候类初始化 2.3 被动引用不会初始化 三.类加载的过程 3.1 加载 3.2 验证 3.3 准备 3.4 解析 3.5 初始化 四.父类和子类初始化过程中的执行顺序 五.类加载器 5.1 类与类加载器 5.2 双亲委派模型 5.3 破坏双亲委派模型 六.Java模块化系统 一.前言 Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最 终形成可以被虚拟机直接使用的Java类型,这个过程

  • 图文详解Java的反射机制

    目录 1.什么是反射 2.Hello,java反射 3.java程序运行的三个阶段 4.反射相关类 5.反射的优化 6.Class类分析 7.获取Class对象的六种方式 8.类加载机制 动态加载和静态加载 类加载流程概述 加载阶段 连接阶段 初始化 9.通过反射获取类的结构信息 1.什么是反射 反射就是Reflection,Java的反射是指程序在运行期可以拿到一个对象的所有信息. 加载类后,在堆中就产生了一个class类型的对象,这个对象包含了类的完整结构的信息,通过这个对象得到类的结构.这

随机推荐