System类管理标准输入输出流和错误流
一、使用System.out作为输出流
package cn.sisy.io;
import java.io.*;
public class SystemDemo01 {
public static void main(String[] args)throws Exception {
//抽象类通过子类实现不同的功能
OutputStream out = null;
// System.out是PrintStream,是OutputStream子类
//谁为我的抽象类实例化,那么我的输出就是向着谁的
out = System.out;
// 现在的out对象具备了向屏幕上打印内容的能力
String str = "Hello,World" ;
out.write(str.getBytes()) ;
out.close() ;
}
}
二、使用PrintWriter结合System.out提升打印能力
打印流包括PrintStream和PrintWriter
package cn.sisy.io;
import java.io.*;
public class SystemDemo02 {
public static void main(String[] args)throws Exception {
PrintWriter out = new PrintWriter(System.out) ;
// 具备了向文件中打印数据的能力
//打印的能力得到了增强
out.println(true) ;
out.println(30) ;
out.println("Hello,World") ;
out.close() ;
}
}
true
30
Hello,World
三、使用键盘输入流System.in
package cn.sisy.io;
import java.io.*;
public class SystemDemo03 {
public static void main(String[] args)throws Exception {
InputStream in = null ;
// 数据等待键盘的输入
in = System.in ;
byte b[] = new byte[1024] ;
// 读的时候是等待用户的输入
int len = in.read(b) ;
in.close() ;
System.out.println("输入的内容为:"+new String(b,0,len)) ;
}
}
a b c d
输入的内容为:a b c d
四、BufferedReader以及转换流InputStreamReader和OutputStreamReader
思考上面的程序容易发现,键盘输入的大小事收数组大小限制的,这样可能会导致中文乱码的情况产生。(*一个中文是两个字节)
当然程序可以通过改成从键盘一直读数据的方式来解决大小限制的问题,但我们下面介绍一种更加好的方式。
BufferedReader:从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。
通常,Reader 所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求。因此,建议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和 InputStreamReader)。例如,
BufferedReader in= new BufferedReader(new FileReader("foo.in"));
将缓冲指定文件的输入。如果没有缓冲,则每次调用 read() 或 readLine() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。
通过用合适的 BufferedReader 替代每个 DataInputStream,可以对将DataInputStream 用于文字输入的程序进行本地化。
InputStreamReader和OutputStreamReader:前者将输入字节流转换成字符流, 后者将输出字符流转换成字节流。
import java.io.* ;
public class SystemDemo04{
public static void main(String args[]){
BufferedReader buf = null ;
// 此处只是准备了要从键盘中读取数据
buf = new BufferedReader(new InputStreamReader(System.in)) ;
String str = null ;
for(int i=0;i<2;i++){
try{
System.out.print("请输入内容:") ;
str = buf.readLine() ;
}
catch (Exception e){
}
System.out.println("输入的内容为:"+str) ;
System.out.println("--------------------------------") ;
}
}
}
分享到:
相关推荐
在Java中,我们可以使用`java.io.Serializable`接口标记需要序列化的类,然后利用`ObjectOutputStream`进行序列化,`ObjectInputStream`进行反序列化。 1. **序列化**:当一个对象需要被保存或者在网络上传输时,...
通过对`java.io`包中的类和接口的学习,我们不仅能够深入了解Java中基础输入输出流的实现原理,还能够掌握如何高效地处理文件和其他数据流。这对于日常的软件开发工作是非常有用的。此外,通过理解装饰者模式的应用...
在Java编程语言中,`java.io`包是处理输入输出操作的核心部分,它包含了大量用于读写数据的类。这个包中的类广泛应用于文件操作、网络通信、标准输入输出流等场景。本篇文章将深入探讨`java.io`包中一些常用的类,并...
Java IO流体系中,有几个核心的抽象基类,包括`InputStream`和`OutputStream`,它们是所有其他具体输入输出流类的基类。此外,还有`Reader`和`Writer`作为字符流的基类。 1. **输入字节流** `InputStream`: - **...
Java IO库还提供了许多其他类和接口,如BufferedInputStream和BufferedOutputStream用于提高性能,DataInputStream和DataOutputStream用于处理基本类型和字符串的序列化,以及Reader和Writer类用于处理字符流。...
Java调用IO流是进行数据输入输出操作的核心技术之一,特别是在处理文件、网络通信和程序间数据传递时不可或缺。在Java中,IO流分为两大类:字节流(Byte Stream)和字符流(Character Stream)。字节流处理单个字节...
Java中的IO流主要分为输入流和输出流两大类,每类又可以根据数据处理方式的不同细分为多种具体实现。本知识点将深入探讨Java IO流的相关细节,包括节点流与处理流的概念,以及文件流、标准输入输出流、缓冲流、转换...
1. **跨平台兼容性**:Java 设计之初就旨在支持多种不同的机器,包括但不限于: - 不同的字符编码标准(如 ASCII、EBCDIC 等)。 - 不同的内部数值表示方式。 - 不同的文件系统,因此有不同的文件名和路径约定。 ...
### Java IO流学习笔记 #### 一、IO流的四大抽象类 - **InputStream/OutputStream**:字节的输入输出流的抽象类。 - 数据单位:字节(8比特,范围0-255) - **Reader/Writer**:字符的输入输出流的抽象类。 - ...
在Java编程中,Oracle存储过程的调用与标准输入(System.in)的交互可能会遇到一些问题,特别是当尝试使用System.in进行阻塞IO操作时。这个问题通常涉及到Java的多线程概念、I/O流的处理以及Oracle存储过程的执行...
在Java编程中,IO流(Input/Output Stream)是处理数据输入与输出的核心机制。...当然,Java IO库提供了许多其他流类型和高级功能,例如处理压缩文件、网络流等,可以根据实际需求选择合适的方法。
Java IO流可以分为两大类:字节流和字符流。这两种流的区别在于处理的数据单位不同,字节流处理的是字节(8位),而字符流处理的是字符(通常为16位)。每种流又可以根据数据流向的不同进一步细分为输入流和输出流。...
在Java中,IO流分为两大类:字节流(Byte Stream)和字符流(Character Stream)。字节流处理单个字节的数据,而字符流处理Unicode字符集中的字符。此外,IO流还有四个主要类别:输入流(Input Stream)、输出流...
- **控制台I/O**:Java控制台的输入输出是通过`System.out`、`System.in`和`System.err`对象来实现的,分别对应标准输出、标准输入和标准错误输出。 ### 输出流OutputStreams `OutputStream`类及其子类用于向数据...