对于out.print、out.println、out.write的理解

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)