write是写,就是可以对一个文件进行更改,但是print只是信息流一个输出展示,不能存储,就像打印机--print,write---发报机。
print其实就是用的write方法,看JDK的PrintStream类,当print(Stirng s)是用write(String s)方法,
private void write(String s) {
try {
synchronized (this) {
ensureOpen();
textOut.write(s);
textOut.flushBuffer();
charOut.flushBuffer();
if (autoFlush && (s.indexOf('\n') >= 0))
out.flush();
}
}
catch (InterruptedIOException x) {
Thread.currentThread().interrupt();
}
catch (IOException x) {
trouble = true;
}
}
private void newLine() {
try {
synchronized (this) {
ensureOpen();
textOut.newLine();
textOut.flushBuffer();
charOut.flushBuffer();
if (autoFlush)
out.flush();
}
}
catch (InterruptedIOException x) {
Thread.currentThread().interrupt();
}
catch (IOException x) {
trouble = true;
}
}
//print和println的执行效率比较
public static void main(String[] args){
int iCount = 99999;
long t1_s = System.currentTimeMillis();
for ( int i = 0;i<iCount;i++ ){
//这里是要测试的方法
}
long t1_e = System.currentTimeMillis();
System.out.println();
System.out.println("call method " + iCount + " times, time:" +( t1_e - t1_s ) );
}
1、System.out.print("hello");
call method 99999 times, time:640
2、System.out.println("hello");
call method 99999 times, time:3172
3、System.out.print("hello");System.out.print("\n");
call method 99999 times, time:3187
4、System.out.print("hello");System.out.println();
call method 99999 times, time:2719
//print和write的解析
因为写入流的会被转化成字符型,所以输出自然是97对应的字符了。而用System.out.print()实际调用的是与这个类型符合的那个方法。详细地说,比如:
int a=97;
char c='a';
System.out.print(a); //调用System.out.print(int)
System.out.print(c); //调用System.out.print(char)
所以无论是什么类型的,用print都可以原样显示出来。
而write方法只接受byte数组或是int,可以看出他的流内部的缓存应该是byte[]类型。int可能是为了支持unicode。那么一个整数转化被转化成字符输出,也是可以理解的了。
System.out.write(97);
System.out.flush();
它就显示了
I/O流分为两个流派 (PrintWriter ,PrintStream)
PrintWriter:read write 这个以char为核心 就是 unicode 16位 能解决编码问题 不然java凭什么在互联网上流行?
PrintStream:input output 这个以 byte为核心 就是ascII 处理英文数字当然牛B 处理编码问题 就死定了
out.flush();
import java.io.*;
public class KeyinStr
{
public static void main(String args[]) throws Exception
{
BufferedReader br=new BufferedReader(
new InputStreamReader(System.in));
String s;
System.out.print( "输入一个字符串: ");
System.out.flush();
s=br.readLine();
System.out.println( "您所输入的字符串是:u "+s);
}
}
flush();是流式输入输出常用的一个方法,表示强制请求清空缓冲区,让i/o系统立马完成它应该完成的输入、输出动作。
比如,在你的程序中,System.out.flush();可以保证在执行到s=br.readLine();之前,System.out.print( "输入一个字符串: ");一定已经得以执行了。也就是说屏幕上肯定会出现“输入一个字符串:”这句话。
简单点说就是把缓冲区里的数据“立即”写到输出流中去。
print其实就是用的write方法,看JDK的PrintStream类,当print(Stirng s)是用write(String s)方法,
private void write(String s) {
try {
synchronized (this) {
ensureOpen();
textOut.write(s);
textOut.flushBuffer();
charOut.flushBuffer();
if (autoFlush && (s.indexOf('\n') >= 0))
out.flush();
}
}
catch (InterruptedIOException x) {
Thread.currentThread().interrupt();
}
catch (IOException x) {
trouble = true;
}
}
private void newLine() {
try {
synchronized (this) {
ensureOpen();
textOut.newLine();
textOut.flushBuffer();
charOut.flushBuffer();
if (autoFlush)
out.flush();
}
}
catch (InterruptedIOException x) {
Thread.currentThread().interrupt();
}
catch (IOException x) {
trouble = true;
}
}
//print和println的执行效率比较
public static void main(String[] args){
int iCount = 99999;
long t1_s = System.currentTimeMillis();
for ( int i = 0;i<iCount;i++ ){
//这里是要测试的方法
}
long t1_e = System.currentTimeMillis();
System.out.println();
System.out.println("call method " + iCount + " times, time:" +( t1_e - t1_s ) );
}
1、System.out.print("hello");
call method 99999 times, time:640
2、System.out.println("hello");
call method 99999 times, time:3172
3、System.out.print("hello");System.out.print("\n");
call method 99999 times, time:3187
4、System.out.print("hello");System.out.println();
call method 99999 times, time:2719
//print和write的解析
因为写入流的会被转化成字符型,所以输出自然是97对应的字符了。而用System.out.print()实际调用的是与这个类型符合的那个方法。详细地说,比如:
int a=97;
char c='a';
System.out.print(a); //调用System.out.print(int)
System.out.print(c); //调用System.out.print(char)
所以无论是什么类型的,用print都可以原样显示出来。
而write方法只接受byte数组或是int,可以看出他的流内部的缓存应该是byte[]类型。int可能是为了支持unicode。那么一个整数转化被转化成字符输出,也是可以理解的了。
System.out.write(97);
System.out.flush();
它就显示了
I/O流分为两个流派 (PrintWriter ,PrintStream)
PrintWriter:read write 这个以char为核心 就是 unicode 16位 能解决编码问题 不然java凭什么在互联网上流行?
PrintStream:input output 这个以 byte为核心 就是ascII 处理英文数字当然牛B 处理编码问题 就死定了
out.flush();
import java.io.*;
public class KeyinStr
{
public static void main(String args[]) throws Exception
{
BufferedReader br=new BufferedReader(
new InputStreamReader(System.in));
String s;
System.out.print( "输入一个字符串: ");
System.out.flush();
s=br.readLine();
System.out.println( "您所输入的字符串是:u "+s);
}
}
flush();是流式输入输出常用的一个方法,表示强制请求清空缓冲区,让i/o系统立马完成它应该完成的输入、输出动作。
比如,在你的程序中,System.out.flush();可以保证在执行到s=br.readLine();之前,System.out.print( "输入一个字符串: ");一定已经得以执行了。也就是说屏幕上肯定会出现“输入一个字符串:”这句话。
简单点说就是把缓冲区里的数据“立即”写到输出流中去。