IO Streams:来源于命令行的IO
简介
程序经常从命令行运行并与在命令行环境中的用户交互。Java平台支持这种互动的方式有两种:通过标准流,通过控制台
标准流
标准流是许多操作系统的一项功能。默认情况下,他们从键盘输入读取和输出到显示器。它们还支持对文件和程序之间的I / O,但功能由命令行解释器而不是程序控制。
Java平台支持三种标准流:标准输入,通过访问System.in; 标准输出,访问通过System.out; 和标准错误,访问过System.err。这些对象被自动定义,不需要打开。标准输出和标准错误都用于输出; 具有误差输出分别允许用户定期输出转移到一个文件,并且仍然能够读取错误消息。欲了解更多信息,请参阅文档,您的命令行解释器。
你可能期望的标准流是字符流,但是,由于历史的原因,他们是字节流。System.out和System.err被定义为 PrintStream对象。虽然在技术上是一个字节流,PrintStream利用内部字符流对象来模拟许多的字符流的特征。
与此相反,System.in是没有字符流特征字节流。使用标准输入作为字符流,包装System.in在InputStreamReader类中。
InputStreamReader cin = new InputStreamReader(System.in);
控制台
前一个程序可以使用控制台,它必须尝试通过调用来检索控制台对象System.console()。如果控制台对象,此方法将返回。如果System.console返回值为NULL,其原因要么是因为控制台操作是不允许的,要么是因为操作系统不支持,要么是因为该方案是在非交互式环境中启动。
控制台对象支持通过其安全的密码输入readPassword方法。这种方法有助于在两个方面安全的密码输入。首先,它抑制呼应,这样口令就不是用户的屏幕上显示。其次,readPassword返回一个字符阵列,而不是一个String,这样的密码可以被覆盖,只要它不再需要,可以很快的从内存中删除它。
Password例子是改变用户的密码原型程序。它演示了几种Console方法。
import java.io.Console;
import java.util.Arrays;
import java.io.IOException; public class Password { public static void main (String args[]) throws IOException { Console c = System.console();
if (c == null) {
System.err.println("No console.");
System.exit(1);
} String login = c.readLine("Enter your login: ");
char [] oldPassword = c.readPassword("Enter your old password: "); if (verify(login, oldPassword)) {
boolean noMatch;
do {
char [] newPassword1 = c.readPassword("Enter your new password: ");
char [] newPassword2 = c.readPassword("Enter new password again: ");
noMatch = ! Arrays.equals(newPassword1, newPassword2);
if (noMatch) {
c.format("Passwords don't match. Try again.%n");
} else {
change(login, newPassword1);
c.format("Password for %s changed.%n", login);
}
Arrays.fill(newPassword1, ' ');
Arrays.fill(newPassword2, ' ');
} while (noMatch);
} Arrays.fill(oldPassword, ' ');
} // Dummy change method.
static boolean verify(String login, char[] password) {
// This method always returns
// true in this example.
// Modify this method to verify
// password according to your rules.
return true;
} // Dummy change method.
static void change(String login, char[] password) {
// Modify this method to change
// password according to your rules.
}
}
该Password的步骤如下:
1,尝试检索Console对象。如果对象是不可用的,中止。
2,调用Console.readLine提示并读取用户的登录名。
4,调用verify,以确认用户是否有权更改密码。(在这个例子中,verify是一个虚拟方法,这个方法总是返回true。)
5,重复以下步骤直到用户输入两次相同的密码:
调用Console.readPassword两次提示输入和读取新的密码。
如果用户输入的密码两次,调用change去改变它。(同样,change是伪方法)。
用空格覆盖两个密码。
6,用空格覆盖旧的密码。
IO Streams:来源于命令行的IO的更多相关文章
- UE4命令行参数解析
转自:https://blog.csdn.net/u012999985/article/details/53544389 一 .命令行参数简述命令行参数是一连串的关键字字符串,当运行可执行文件时可以通 ...
- Go语言中的IO操作、Flag包以及urfave/cli命令行框架
一.格式化输入和输出 1.从终端获取用户的输入 fmt.Scanf 空格作为分隔符,占位符和格式化输出的一致 fmt.Scan 从终端获取用户的输入,存储在Scanln中的参数里,空格和换行符作为 ...
- Objective-C:用命令行参数的格式对文件进行IO操作
// main.m // 03-copyFile // Created by ma c on 15/8/24. // Copyright (c) 2015年. All rights reserved. ...
- Ubuntu 14.10 下进程实时IO监控iotop命令详解
介绍 Linux下的IO统计工具如iostat, nmon等大多数是只能统计到per设备的读写情况, 如果你想知道每个进程是如何使用IO的就比较麻烦. iotop 是一个用来监视磁盘 I/O 使用状况 ...
- Linux进程实时IO监控iotop命令详解
介绍 Linux下的IO统计工具如iostat, nmon等大多数是只能统计到per设备的读写情况, 如果你想知道每个进程是如何使用IO的就比较麻烦. iotop 是一个用来监视磁盘 I/O 使用状况 ...
- docker(三)反正我不喜欢敲命令,daocloud.io管理你的docker,安装远程下载工具aria2 迅雷远程下载 xware
1.登录daocloud.io 2.寻找合适的镜像 3.查看镜像信息并部署,它给出了一个运行命令,其中有用的只是-V,目录映射,映射了物理服务器的/tddownload到容器的/xware/tddow ...
- Centos硬盘IO性能检测命令iostat[转]
Centos硬盘IO性能检测命令iostat[转] 在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都 ...
- FreeBSD查看带宽占用情况,CPU,硬盘IO 虚拟内存等命令
FreeBSD查看带宽占用情况,CPU,硬盘IO 虚拟内存等命令 来源 https://www.liurongxing.com/freebsd-tips.html 来源 http://blog.51c ...
- 性能测试 | Linux系统top命令中的io使用率,很多人都误解了它的具体含义
body{ text-align:left; width:80%; margin:10px 100px; } 最近在做连续数据流的缓冲系统,C语言代码实现后,粗略测试了下,功能上应该没有问题.那么,接 ...
随机推荐
- SAP Cloud for Customer Extensibility的设计与实现
今天的文章来自Jerry的同事,SAP成都研究院C4C开发团队的开发人员徐欢(Xu Boris).徐欢就坐我左手边的位置,因此我工作中但凡遇到C4C的技术问题,一扭头就可以请教他了,非常方便.下图是他 ...
- Python开发第二篇
运算符 1.算术运算符 % 取余运算符,返回余数 ** 幂运算符 //返回商的整数部分 2.逻辑运算符 and 与运算符 a and b 如果a为False是,表达式为False,如果a为True返 ...
- noip模拟赛#24
这套题我只会写第二题...我... T1:给出一个含有向边和无向边的混合图,如何确定无向边的方向使得图中不存在环.保证有解.多解情况输出任意解. =>我往最大流的残量网络的方向去想了...因为混 ...
- bzoj2600 [Ioi2011]ricehub
Description 乡间有一条笔直而长的路称为“米道”.沿着这条米道上 R 块稻田,每块稻田的坐标均为一个 1 到 L 之间(含 1 和 L)的整数.这些稻田按照坐标以不减的顺序给出,即对于 0 ...
- IOS 一些好的框架和 技术大牛的博客
http://blog.csdn.net/rodulf/article/details/51871093 比较好的框架链接: http://www.jianshu.com/p/9216c561b0f ...
- 2018.6.19 Java核心API与高级编程实践复习总结
Java 核心编程API与高级编程实践 第一章 异常 1.1 异常概述 在程序运行中,经常会出现一些意外情况,这些意外会导致程序出错或者崩溃而影响程序的正常执行,在java语言中,将这些程序意外称为异 ...
- python实现剑指offer删除链表中重复的节点
题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...
- 用css去除chrome、safari等webikt内核浏览器对控件默认样式
有这么一个webkit的私有属性: -webkit-appearance:none; /*去除input默认样式*/ 添加该样式,并且值为'none'时即可取消浏览器对于控件的默认样式. 另外这个属性 ...
- 实用小工具不定期合集(textarea 高度自适应、自动计算Y轴刻度、json转table)
1.textarea高度自适应 这个非常有用,但是网上的解决方案都不尽人意,话不多说,上代码. function auto (elem) { var minHeight = 30 var change ...
- 51nod——1285 山峰和分段(暴力出奇迹)
要求每段的点数都一样,因此分的段数cnt肯定是n的因子,要求每段都有山峰,因此cnt肯定小于等于山峰数量.分段的宽度d=n/cnt,对山峰数量做一个前缀和,检查一下每一段的山峰数量是否没有增加即可. ...