java实现管道_Java中重定向与管道的实现

一.  前言

在学习Algorithms Fourth Edition第一章的时候,遇到了关于重定向与管道的问题

觉得非常的有趣,整理如下:

二.  实现

首先,我们先写一个用于输出的类:

import edu.princeton.cs.algs4.StdOut;

import edu.princeton.cs.algs4.StdRandom;

//输出n个lo~hi之间的随机值

public class RandomSeq {

public static void main(String[] args) {

int n = Integer.parseInt(args[0]);

double lo = Double.parseDouble(args[1]);

double hi = Double.parseDouble(args[2]);

for (int i = 0; i 

double x = StdRandom.uniform(lo, hi);

StdOut.printf("%.2f\n", x);

}

}

}

我们可以用下命令行来将RandomSeq类中的输入流写入到一个叫data.txt的文件中

javac RandomSeq.java

java RandomSeq 1000 100.0 200.0 > data.txt //将1000个100~200之间的随机数写入到data.txt文件中

接下来,我们写一个用于输入的类:

import edu.princeton.cs.algs4.StdIn;

import edu.princeton.cs.algs4.StdOut;

//输出所有数的平均值

public class Average {

public static void main(String[] args) {

int count = 0;

double sum = 0.0;

while (!StdIn.isEmpty()) {

double value = StdIn.readDouble();

sum += value;

count++;

}

double average = sum / count;

StdOut.printf("Average is %.5f\n", average);

}

}

我们可以用下命令行来输入一些数字传入Average类中

javac Average.java

java Average

3

4

5

 //意思是在命令行中按ctrl + D 键,然后回车

类似,我们可以重定向标准输入使StdIn从文件而不是从终端应用程序中读取数据

java Average 

将上面这些结合起来,将一个程序的输出重定向为另一个程序的输入,叫做管道

将RandomSeq的输出重定向为Average类的输入

java RandomSeq 1000 100.0 200.0 | java Average

接下来说一下,为什么在前言中我觉得管道非常的有意思呢?

是因为它突破了我们能够处理的输入输出流的长度限制:

例如我们将RandomSeq里的n设置为1000000000,按照常理来说,我们计算机是没有足够的空间来存储十亿个数的

但是当RandomSeq调用StdOut.println()的时候,它就向输出流的末尾添加了一个字符串

当Average调用StdIn.readInt()的时候,它就向输出流的开头删除了一个字符串

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值