System.out.print

果壳 2009-09-27 01:44:07
再一个问题,JDK源文件中的OutPutStream.java中的write方法有3个
1个是public abstract void write(int b) throws IOException;
2个是public void write(byte b[]) throws IOException {
write(b, 0, b.length);
}
3个是 public void write(byte b[], int off, int len) throws IOException {
if (b == null) {
throw new NullPointerException();
} else if ((off < 0) || (off > b.length) || (len < 0) ||
((off + len) > b.length) || ((off + len) < 0)) {
throw new IndexOutOfBoundsException();
} else if (len == 0) {
return;
}
for (int i = 0 ; i < len ; i++) {
write(b[off + i]);
}
}
第2个和第3个write互相调用,我就没看出来到底想做什么,如果长度是对的不是就会一直反复调用死循环么,我想看下System.out.print的原理是什么,但是翻到过后看不明白,好像没实现什么功能的
...全文
58 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2009-09-27
  • 打赏
  • 举报
回复
因为这时候你for循环中调用write方法时传递的不再是一个byte数组 而已byte数组中某一索引的值
「已注销」 2009-09-27
  • 打赏
  • 举报
回复
是不会出现死循环的,你可以在自己考虑考虑
summerXJY100 2009-09-27
  • 打赏
  • 举报
回复
write(byte b[]){}与write(byte b[],int 0,int len) 是相同的
write(byte b[],int 0,int len)应该是为了方便我们使用在write(byte[] b)这个方法的基础上增加的一个方法吧。
for(int i=0;i<len;i++){
write(b[off+i]);
}
这是个递归,off+1会导致off==len==0而退出,不会出现死循环

OutputStream中的write(byte b[])中的方法实现,没研究过,不知道是什么东西

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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