一、其他

1、System.in、System.out(标准输入、输出流)

  System.in:标准的输入流,默认从键盘输入。
  System.out:标准的输出流,默认从控制台输出。
  改变标准输入输出(System下的静态方法)。

  void setIn(InputStream in):重新分配"标准"输入流
  void setOut(PrintStream out):重新分配"标准"输出流

2、PrintStream、PrintWriter(打印流)

  代码示例:将内存数据打印到文件

 1 public class Main {
2 public static void main(String[] args) {
3 try {
4 FileOutputStream fos = new FileOutputStream(new File("F:\\hello.txt"));
5
6 // 创建打印输出流,设置为自动刷新模式(写入换行符或字节 '\n' 时都会刷新输出缓冲区)
7 PrintStream ps = new PrintStream(fos, true);
8
9 // 把标准输出流(控制台输出)改成文件
10 System.setOut(ps);
11
12 for (int i = 0; i <= 15; i++) {
13 System.out.print(i);
14 if (i % 5 == 0) {
15 System.out.println();
16 }
17 }
18 } catch (Exception e) {
19 }
20 }
21 }
22
23 // 结果.文件:F:\\hello.txt
24 // 内容:
25 0
26 12345
27 678910
28 1112131415

  代码示例:打印系统环境信息

1 public class Main {
2 public static void main(String[] args) throws Exception {
3 Properties properties = System.getProperties();
4 properties.list(new PrintStream("F:\\hello.txt"));
5 }
6 }

3、DataInputStream 、DataOutputStream(数据流)

  作用:用于读取或写出基本数据类型的变量或字符串。
  代码示例:写。将内存中的字符串、基本数据类型的变量写出到文件中。

 1 public class Main {
2 public static void main(String[] args) {
3 try (DataOutputStream dos = new DataOutputStream(new FileOutputStream("data.dat"));) {
4
5 dos.writeUTF("张三");
6 dos.writeInt(23);
7 dos.writeBoolean(true);
8
9 dos.flush(); // 刷新操作,将内存中的数据写入文件
10 } catch (Exception e) {
11 }
12 }
13 }

  代码示例:读。将文件中的数据读到内存中。需要与保存的数据的顺序一致!

 1 public class Main {
2 public static void main(String[] args) {
3 try (DataInputStream dis = new DataInputStream(new FileInputStream("data.dat"));) {
4 String name = dis.readUTF();
5 int age = dis.readInt();
6 boolean isMale = dis.readBoolean();
7
8 System.out.println("name = " + name);
9 System.out.println("age = " + age);
10 System.out.println("isMale = " + isMale);
11 } catch (Exception e) {
12 }
13 }
14 }

4、管道输入流、管道输出流

  管道输入/输出流和普通的文件输入/输出流或者网络输入/输出流不同之处在于,它主要用于线程之间的数据传输,而传输的媒介为内存。
  管道输入/输出流主要包括了如下4种具体实现:PipedOutputStream、PipedInputStream、PipedReader和PipedWriter,前两种面向字节,而后两种面向字符。

  代码示例:

 1 public class Main {
2
3 public static void main(String[] args) {
4 try (PipedWriter out = new PipedWriter();
5 PipedReader in = new PipedReader();) {
6
7 // 将输入流和输出流进行连接,否则会出现IO错误
8 out.connect(in);
9
10 // 开启一个线程用于读取管道流
11 new Thread(new Print(in), "printThread").start();
12
13 // 接收键盘的输入,并写入到管道流中
14 int receive = 0;
15 while ((receive = System.in.read()) != -1) {
16 out.write(receive);
17 }
18 } catch (Exception e) {
19 }
20 }
21
22
23 static class Print implements Runnable {
24 private final PipedReader in;
25
26 public Print(PipedReader in) {
27 this.in = in;
28 }
29
30 @Override
31 public void run() {
32 int receive = 0;
33 try {
34 while ((receive = in.read()) != -1) {
35 System.out.print((char) receive);
36 }
37 } catch (IOException ex) {
38 }
39 }
40 }
41 }

  上述代码,创建了线程printThread,它用来接收main线程的输入,任何main线程的输入均通过PipedWriter写入,而printThread在另一端通过PipedReader将内容读出并打印。
  注意:对于Piped类型的流,必须先要进行绑定,也就是调用connect()方法,如果没有将输入/输出流绑定起来,对于该流的访问将会抛出异常。

  参考文档:《Java并发编程的艺术》

Java基础(八)——IO流5_其他流的更多相关文章

  1. java基础之IO流(二)之字符流

    java基础之IO流(二)之字符流 字符流,顾名思义,它是以字符为数据处理单元的流对象,那么字符流和字节流之间的关系又是如何呢? 字符流可以理解为是字节流+字符编码集额一种封装与抽象,专门设计用来读写 ...

  2. java基础之IO流(一)字节流

    java基础之IO流(一)之字节流 IO流体系太大,涉及到的各种流对象,我觉得很有必要总结一下. 那什么是IO流,IO代表Input.Output,而流就是原始数据源与目标媒介的数据传输的一种抽象.典 ...

  3. Java基础之IO流整理

    Java基础之IO流 Java IO流使用装饰器设计模式,因此如果不能理清其中的关系的话很容易把各种流搞混,此文将简单的几个流进行梳理,后序遇见新的流会继续更新(本文下方还附有xmind文件链接) 抽 ...

  4. Java基础八--构造函数

    Java基础八--构造函数 一.子父类中构造函数的特点 1.1 为什么在子类构造对象时,发现,访问子类构造函数时,父类也运行了呢? 原因是:在子类的构造函数中第一行有一个默认的隐式语句. super( ...

  5. 【java基础】]IO流

    IO流 概念: 流的概念源于unix中管道(pipe)的概念,在unix中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备,外部文件等 一个流,一定能够会有源和去向(目的地),他 ...

  6. java基础44 IO流技术(输出字节流/缓冲输出字节流)和异常处理

    一.输出字节流 输出字节流的体系: -------| OutputStream:所有输出字节流的基类(抽象类) ----------| FileOutputStream:向文件输出数据的输出字节流(把 ...

  7. java基础之io流总结一:io流概述

    IO流概念: 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.io流是实现输入和输出的基础,可以方便的实现数据的输入和输出操作. IO流的分类: 根据处理数据类型的不同分为:字符流 ...

  8. Java基础学习总结(13)——流IO

    一.JAVA流式输入/输出原理 流是用来读写数据的,java有一个类叫File,它封装的是文件的文件名,只是内存里面的一个对象,真正的文件是在硬盘上的一块空间,在这个文件里面存放着各种各样的数据,我们 ...

  9. Java基础系列——IO流

    ---恢复内容开始--- Java对数据的操作都是通过流的方式,数据的输入和输出是相对内存来说的,将外设的数据读到内存:输入流:将内存的数据写到外设:输出流. 流按操作数据分为两种:字节流,字符流. ...

  10. 黑马程序员——JAVA基础之IO流FileReader,FileWriter

    ------- android培训.java培训.期待与您交流! ---------- IO(Input Output)流  IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 J ...

随机推荐

  1. Java中特殊的类——包装类

    Java中特殊的类--包装类 包装类就是将基本数据类型封装在类中. 1.包装类 (1)自定义包装类 将基本数据类型包装成一个类对象的本质就是使用Object进行接收处理. 此时IntDemo类就是in ...

  2. [学习总结]3、Android---Scroller类(左右滑动效果常用的类)

    参考资料:http://blog.csdn.net/vipzjyno1/article/details/24592591 非常感谢这个兄弟! 在android学习中,动作交互是软件中重要的一部分,其中 ...

  3. oralce 存储过程传入 record 类型的参数?

    先定义一个 package , package中含有一个 record 类型的变量 create or replace package pkg_record is type emp_record is ...

  4. entfrm-app赋能entfrm零代码开发平台 开启多平台分发

    entfrm-app是基于uni-app 框架.使用 Vue.js 语法开发的移动端 App开源产品.它可以编译为 H5.IOS App.Android App.微信小程序.QQ小程序.钉钉小程序.支 ...

  5. 利用ajax,js以及正则表达式来验证表单递交

    <!DOCTYPE html><html lang="en"> <head> <meta charset="utf-8" ...

  6. 记一次ssh连接慢

    2020-03-28日机房搬迁完后,发现有一台60服务器ssh连接特别慢,但是其他服务器正常; 下面是解决过程: vim /etc/ssh/sshd_config       (编辑配置文件) 查找F ...

  7. .net 5 开发部署B/S程序。

    现在.net 6 已经出来了,visualStudio 2022也发行预览版了. 自 .net5 发布,.net core 与.net framework 已经走向统一.确实越来越好用了. 现在.ne ...

  8. 因Console.Read()导致Centos 后台运行.net core程序报错

    .net 控制台程序通常用 Console.Read(),或者Console.ReadKey()让进程阻塞保持,不退出. 但在.net core 需要将程序放在后台执行时 用Console.Read( ...

  9. tableau添加参考线

    一.将数据窗口切换至分析窗口-点击自定义-参考线 二.出现编辑参考线和参考区间的界面(整个表指的是整个视图,每区指的是如下2018就是一个区,每单元格指的是横轴的最小值) 三.我们分别为每区添加最大值 ...

  10. TSN(时间敏感网络)测试、仿真、分析平台应用攻略

    前言 在汽车领域,近几年车内网络通讯方式的变革诉求,期望能够有更高的数据传输速率,以及保证实时性的通讯方式引入.例如对于ADAS而言,传统的CAN总线已经远远不能满足其对通讯的要求,而基于车载以太网的 ...