JAVA输入输出(IO)之常用流

这一篇博客为大家介绍一下JAVA中常用的流的使用方法。
注:示例仅起到演示作用,不对异常做处理。

ByteArrayInputStream、ByteArrayOutputStream

ByteArrayInputStream 包含一个内部缓冲区,该缓冲区包含从流中读取的字节。内部计数器跟踪 read 方法要提供的下一个字节。
ByteArrayOutputStream类实现了一个输出流,其中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray() 和 toString() 获取数据。
对于这两个流而言,类中的方法在关闭流后仍可被调用,而不会产生任何 IOException。

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class IODemo
{
   public static void main(String[] args) throws IOException
   {
      byte[] arr = "jianggujin".getBytes();
      // ByteArrayInputStream可以将字节数组转换为输入流
      ByteArrayInputStream inputStream = new ByteArrayInputStream(arr);
      ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
      int len = -1;
      byte[] buffer = new byte[128];
      while ((len = inputStream.read(buffer)) != -1)
      {
         outputStream.write(buffer, 0, len);
      }
      outputStream.flush();
      System.out.println(outputStream.toString());
   }
}

ByteArrayInputStream和ByteArrayOutputStream用于处理字节流,如果要处理字符流的话,可以使用CharArrayReaderCharArrayWriter

DataInputStream、DataOutputStream

DataInputStream类,数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。
DataOutputStream类,数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中。然后,应用程序可以使用数据输入流将数据读入。

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class IODemo
{
   public static void main(String[] args) throws IOException
   {
      DataOutputStream outputStream = new DataOutputStream(
            new FileOutputStream("io.dat"));
      outputStream.writeInt(10);
      outputStream.writeUTF("你好");
      outputStream.flush();
      outputStream.close();

      DataInputStream inputStream = new DataInputStream(new FileInputStream(
            "io.dat"));
      // 读取之前保存的数据,要按照保存的顺序读取
      System.out.println("存储的整数为:" + inputStream.readInt());
      System.out.println("存储的字符串为:" + inputStream.readUTF());
      inputStream.close();
   }
}

ObjectInputStream、ObjectOutputStream

这两个类是用来将Java对象进行持久化,可以将Java对象保存在文件中或者网络传输,反序列化后可直接使用。注意:通过该流持久化的对象所属类一定要实现Serializable接口。

我们新建一个测试用的类。

import java.io.Serializable;

/**
 * 一定要实现Serializable接口
 *
 * @author jianggujin
 *
 */
public class ObjTest implements Serializable
{
   private String name;

   public String getName()
   {
      return name;
   }

   public void setName(String name)
   {
      this.name = name;
   }

   @Override
   public String toString()
   {
      return "name=" + name;
   }
}

然后我们创建这个类的对象,并将其持久化在文件中。

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class IODemo
{
   public static void main(String[] args) throws IOException,
         ClassNotFoundException
   {
      // 实例化一个用于持久化的对象
      ObjTest objTest = new ObjTest();
      objTest.setName("jianggujin");

      // 将对象持久化到文件中
      ObjectOutputStream outputStream = new ObjectOutputStream(
            new FileOutputStream("io.dat"));
      outputStream.writeObject(objTest);
      outputStream.flush();
      outputStream.close();

      // 从文件中将对象读出来
      ObjectInputStream inputStream = new ObjectInputStream(
            new FileInputStream("io.dat"));
      ObjTest tmp = (ObjTest) inputStream.readObject();
      inputStream.close();
      System.out.println(tmp);
   }
}

Java中还有很多用于操作流的实现类,大家可以自己去尝试一下,在解决不同问题的时候,选择合适的类。

时间: 2024-07-28 14:06:18

JAVA输入输出(IO)之常用流的相关文章

Java的IO操作中关闭流的注意点

一.错误示例1public void CopyFile(){FileReader fr = null;FileWriter fw = null;try{fr = new FileReader("c:\\xy1.txt"); // ①fw = new FileWriter("c:\\xy2.txt"); // ②char[] charBuffer = new char[1024];int len = 0;while ((len = fr.read(charBuffer

JAVA输入输出(IO)之字符流

上一篇<JAVA输入输出(IO)之字节流>介绍了JAVA字节输入输出流的一些用法,字节流一般是用于读写二进制数据的,当我们要读些字符数据的时候,如文本文件,就显得有些麻烦.所以JAVA还提供了专门用于读写字符数据的字符流. 字符输入流 java.io.Reader用于读取字符流的抽象类.子类必须实现的方法只有 read(char[], int, int) 和 close().但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能. 方法摘要 返回值 方法名 说明 abstrac

JAVA输入输出(IO)之字节流

在之前的博客中,当介绍某个类的时候,我会将类的构造方法以及方法摘要通过表格展示出来,这些内容在JDKAPI上面都可以找到,所以从这一篇博客开始,这些方法将不再全部列出,会从中抽取一部分常用的方法. 言归正传,在上一篇博客<JAVA输入输出(IO)之文件>中介绍了File类的简单使用,如果我们要对文件进行读取.写入,仅有一个File是远远不够的,这一篇为大家介绍字节流的概念,通过本片博客,我们可以实现文件读取.写入.复制等.当然了输入输出流不仅仅可以用在文件的读写上面,还可以用于网络通信.进程通

java的IO流的典型应用

尽管库内存在大量IO流类,可通过多种不同的方式组合到一起,但实际上只有几种方式才会经常用到.然而,必须小心在意才能得到正确的组合.下面这个相当长的例子展示了典型IO配置的创建与使用,可在写自己的代码时将其作为一个参考使用.注意每个配置都以一个注释形式的编号起头,并提供了适当的解释信息.   //: IOStreamDemo.java // Typical IO Stream Configurations import java.io.*; import com.bruceeckel.tools.

Java基础-21总结字符流,IO流编码问题,实用案例必做一遍

你需要的是什么,直接评论留言. 获取更多资源加微信公众号"Java帮帮" (是公众号,不是微信好友哦) 还有"Java帮帮"今日头条号,技术文章与新闻,每日更新,欢迎阅读 学习交流请加Java帮帮交流QQ群553841695 分享是一种美德,分享更快乐! 1:字符流(掌握)  // 字节流读取中文可能出现的小问题(所以用字符流输入输出中文) package cn.itcast_01; import java.io.FileInputStream; import ja

java 标准Io流

问题描述 我想问下,为什么java里面要有标准IO流,有了字节流和字符流,不就可以了吗.为什么啊,我晕. 问题补充:blessed24 写道 解决方案 标准IO指计算机的的输入设备和输出设备,搞这些的吧,为了兼容不同系统,不同物理设备的输入与输出!解决方案二:引用是不是说,只有标准Io实现了跨平台,其他的流都不是跨平台的?标准IO 一般所有的操作系统都是一样的...windows要遵循,linux也一样吧....解决方案三:引用inpublic static final InputStream

Java中IO流缓冲区的装饰模式的体现

一.Java中IO流缓冲区 import java.io.*; public class BufferedTest {public static void copy1(){InputStream is = null;OutputStream os = null;try{is = new FileInputStream("c:\\xy1.jpg");os = new FileOutputStream("d:\\xy2.jpg");int len = 0;byte[]

java的IO当中字节流和字符流的区别和联系是什么

问题描述 java的IO当中字节流和字符流的区别和联系是什么 java的IO当中字节流和字符流的区别和联系是什么 在什么情况下用字符流,或者用字节流. 解决方案 两个都是流,一个是以一个个字节传的,一个是以一个个字符传的,再不懂百度 解决方案二: 不清数 不是这份专业的 解决方案三: 不清数 不是这份专业的 解决方案四: 不清数 不是这份专业的 解决方案五: 不清数 不是这份专业的 解决方案六: Java IO中字节流和字符流的区别Java IO中字节流和字符流的区别字节流和字符流的区别是什么?

Java基于IO流读取文件的方法_java

本文实例讲述了Java基于IO流读取文件的方法.分享给大家供大家参考,具体如下: public static void readFile(){ String pathString = TEST.class.getResource("/simu").getFile(); try { pathString = URLDecoder.decode(pathString, "utf-8"); } catch (UnsupportedEncodingException e1)

java学习笔记16--I/O流和文件

IO(Input  Output)流 IO流用来处理设备之间的数据传输,对数据的操作是通过流的方式,Java用于操作流的对象都在IO包中 输入/输出流可以从以下几个方面进行分类 从流的方向划分: 输入流.输出流 从流的分工划分: 节点流.处理流 从流的内容划分: 面向字符的流.面向字节的流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象.本质其实就是基于字节流读取时,去查了指定的码表. 字节流和字符流的区别: 读写单位不同:字节流以字节(8bit)为单位,字