Java中的输入是指从数据源等读到Java程序中,这里的数据源可以是文件,内存或网络连接,输出则是指从Java程序中写到目的地。
输入输出流可以分为以下几种类型(暂时不考虑File类)
Java IO共涉及40多个类,下图是字节流各个类之间的关系
InputStream
InputStream的子类及其说明有如下所示
OutputStream
OutputStream的子类及其说明有如下所示
对于类中方法的熟悉不详述了,可以参照JDK文档,或者可以试着在IDE中,实例化上面的类,使用此类对象时,按下.之后,会出现提示框,再一个一个熟悉就好了。
简单示例
了解了常用的字节流类,下面以文件数据的输入输出说明以上类的使用。
1.在java程序中生成1~20的平方数,并输出到文件中。
package com.songpu;import java.io.BufferedOutputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.PrintStream;public class MyFileOutputStream { public static void main (String[] args) throws IOException{ try{ FileOutputStream fos = new FileOutputStream("F:\\test1.txt"); BufferedOutputStream bos = new BufferedOutputStream(fos,1024); PrintStream ps = new PrintStream(bos,false); System.setOut(ps); for(int i= 0;i<20;i++){ System.out.println(i*i); } ps.close(); }catch(IOException e){ e.printStackTrace(); } } }
2.将刚才生成的文件中的数据输入到程序,并将其打印到屏幕
package com.songpu;import java.io.*;public class MyFlieInputStream { public static void main(String[] args) throws IOException { File file = new File("F:\\test1.txt"); FileInputStream in = new FileInputStream(file); BufferedInputStream bis = new BufferedInputStream(in); byte[] bytes = new byte[(int) file.length()]; do { bis.read(bytes); System.out.println(new String(bytes)); }while (bis.read() != -1); in.close(); } }
再以序列化与反序列化的例子说明ObjectInputStream和ObjectOutputStream的使用
Java序列化是将对象变成二进制形式的一连串字符描述的过程,反序列化就是序列化的相反过程,把这些字符重建为对象。
序列化和反序列化的作用,是保存对象到文件或数据库中,使对象能够传输,序列化的要求是实现Serializable接口,代码如下所示
package com.songpu.serial;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.OutputStream;import java.io.Serializable;/* * 待序列化的类,实现序列化接口 */class Person implements Serializable{ public String name; public int age; public Person(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }/* * 测试类 */public class SerialTest{ public static void main(String[] args) throws IOException, ClassNotFoundException{ ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("F:\\test.txt")); Person p0 = new Person("tangsong",21); oos.writeObject(p0); oos.flush(); oos.close(); deserial(); } public static void deserial() throws ClassNotFoundException, IOException{ ObjectInputStream ois = new ObjectInputStream(new FileInputStream("F:\\test.txt")); Person p1 = (Person)ois.readObject(); ois.close(); System.out.println("Name="+p1.getName()+";Age="+p1.getAge()); } }
运行上述代码的结果如下:

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于结构化数据处理开源库SPL的相关问题,下面就一起来看一下java下理想的结构化数据处理类库,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于PriorityQueue优先级队列的相关知识,Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于java锁的相关问题,包括了独占锁、悲观锁、乐观锁、共享锁等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于多线程的相关问题,包括了线程安装、线程加锁与线程不安全的原因、线程安全的标准类等等内容,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于枚举的相关问题,包括了枚举的基本操作、集合类对枚举的支持等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Java的相关知识,其中主要介绍了关于关键字中this和super的相关问题,以及他们的一些区别,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于平衡二叉树(AVL树)的相关知识,AVL树本质上是带了平衡功能的二叉查找树,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Java的相关知识,其中主要整理了Stream流的概念和使用的相关问题,包括了Stream流的概念、Stream流的获取、Stream流的常用方法等等内容,下面一起来看一下,希望对大家有帮助。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

Dreamweaver CS6
視覺化網頁開發工具

禪工作室 13.0.1
強大的PHP整合開發環境