一、其他

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. 转 Android Lifecycle、ViewModel和LiveData

    转自:https://www.jianshu.com/p/982545e01d0a 1.概述 在I / O '17的时候,其中一个重要的主题是Architecture Components.这是一个官 ...

  2. Java——数组的定义与使用

    数组的定义与使用 1.数组的基本概念 (1)数组的动态初始化: 数组首先先开辟内存空间,而后再使用索引进行内容的设置,这种定义数组的方式称为动态初始化 数组是引用数据类型,存在有内存分配问题.在使用前 ...

  3. _BSMachError: (os/kern) invalid capability (20) _BSMachError: (os/kern) invalid name (15) 问题的解决

    在项目中突然遇到一个问题,也就是_BSMachError: (os/kern) invalid capability (20) _BSMachError: (os/kern) invalid name ...

  4. 微服务中心Eureka

    一.简介 Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS(AWS 是业务流程管理开发平台AWS Enterprise BPM Platform ...

  5. Windows服务器java.exe占用CPU过高问题分析及解决

    最近在测试一个用java语言实现的数据采集接口时发现,接口一旦运行起来,CPU利用率瞬间飙升到85%-95%,一旦停止就恢复到40%以下,这让我不得不面对以前从未关注过的程序性能问题. 在硬着头皮查找 ...

  6. centos7.4 64位安装 git

    参考博客:Linux Jenkins配置Git 1. git --version 查看有没有安装 过 git,没有则 继续 2. git 压缩包下载地址:https://mirrors.edge.ke ...

  7. MyEclipse配置Spring框架(基础篇)

    一.新建项目,添加spring的相关jar包等 二.创建相关类以及属性和方法 Student.java package com.yh; public class Student implements ...

  8. 【阿菜做实践】利用go语言写一个简单的Pow样例

    本篇博客的主要内容是用go写一个简单的Proof-of-Work共识机制,不涉及到网络通信环节,只是一个本地的简单demo.开发IDE用的是JB Golang. 整个项目的文件结构如下: PoWdem ...

  9. 『与善仁』Appium基础 — 21、元素的基本操作

    目录 1.元素的基本操作说明 (1)点击操作 (2)清空操作 (3)输入操作 2.综合练习 1.元素的基本操作说明 (1)点击操作 点击操作:click()方法.(同Selenium中使用方式一致) ...

  10. HBuilderX无法启动微信小程序?仅三步

    1.复制微信开发者工具启动路径 : "C:\Program Files (x86)\Tencent\微信web开发者工具\微信web开发者工具.exe" 不要后面的 "微 ...