【Java和C关于缓存机制的区别】

握草 2018-01-21 04:21:31
在这里我不想引发任何无关与问题的回复...请看代码:

public class Demo{
public static void main(String[] args){
System.out.println("Hello");
for(int i=0; i<10; i++){
try{
Thread. sleep(1000);
System.out.println("*");
} catch(Exception e){
System.out.println("SHIT");
}
}
}
}


#include<stdio.h>
int main(void)
{
printf("Hello");
for(int i=0; i<10; i++){
putchar('*');
sleep(1);
}
return 0;
}


“不错,这两份代码怎么看怎么相像——不就是把C语言的代码用Java重协了一份吗?”
不对!!
且看output:

//Java的输出
【Hello,然后每隔一秒打印一个*(很正常嘛)】

再看看C的。。

//C的输出
【等待10秒,这期间没有任何输出。。然后。。Boom!所有的Hello和**********一并输出】


乍一看貌似java的输出很“对”,但是仔细想一想。。考虑到缓存的三种分类。。这是标准IO所以是。。行缓存。。就是说只有当用户向终端标准输入一个'\n'(回车符),才会刷新内存。。这样看来C的输出才是合理的嘛。。
对啊。
那Java的输出是什么鬼?!怎么还可以完全无视缓存的感受的!!!!

说明:因为对于Java的标准IO不是很熟悉,于是就把本问题放在Java的板块了。看看大家的看法和意见。。
你要是完全谈java,我也没意见。。只要可以说清楚为毛Java的IO这么不同就行!
...全文
537 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
datadev_sh 2018-01-24
  • 打赏
  • 举报
回复
看一下源码,java的println方法自动调用了flush方法。

java语言的特点是,很多操作,都被JDK封装好了,程序员并需要关注那么多的细枝末节。
握草 2018-01-21
  • 打赏
  • 举报
回复
而且C的话在末尾会输出一个%
Hello**********%
有人知道为什么吗??
oyljerry 2018-01-21
  • 打赏
  • 举报
回复
不同API实现不同。Java的println会有换行输出。所以会强制刷新缓冲区。而c需要你fflush强制。或者你用printf \n
握草 2018-01-21
  • 打赏
  • 举报
回复
为什么C要fflush函数,但是Java不需要呢??
握草 2018-01-21
  • 打赏
  • 举报
回复
说明:C语言那份加上头文件#include<unistd.h>

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧