java中一个关于输入流中read(byte b[])方法的问题

代码如下:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
public class Example11_1{
public static void main(String args[]){
new NetWin();
}
}
class NetWin extends JFrame implements ActionListener,Runnable{
JButton button;
URL url;
JTextField text;
JTextArea area;
byte b[]=new byte[118];
Thread thread;
NetWin(){
text=new JTextField(20);
area=new JTextArea(12,12);
button=new JButton("确定");
button.addActionListener(this);
thread=new Thread(this);
JPanel p=new JPanel();
p.add(new JLabel("输入网址:"));
p.add(text);
p.add(button);
add(new JScrollPane(area),BorderLayout.CENTER);
add(p,BorderLayout.NORTH);
setBounds(60,60,360,300);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e){
if(!(thread.isAlive()))
thread=new Thread(this);
try{ thread.start();
}
catch(Exception ee){}
}
public void run(){
try { int n=-1;
area.setText(null);
url=new URL(text.getText().trim());
InputStream in=url.openStream();
while((n=in.read(b))!=-1){
String s=new String(b,0,n);
area.append(s);
}
}
catch(MalformedURLException e1){
text.setText(""+e1);
return;
}
catch(IOException e1){
text.setText(""+e1);
return;
}
}
}

这是一个输入网址(完整的,比如输入http://www.yahoo.cn)就读取服务器上资源的程序,显示的是源码。
问题在while循环那里,read方法不是尽量把数组填满的吗,可是我调试的时侯发现不尽是这样的,这样说吧,比如我输入:http://www.yahoo.cn,while循环第一次时,n=26,第二次到后面就等于118(数组b的长度为118)了,按理说第一次n也应该等于118的啊,当我输入http://www.baidu.com时,while循环第一次n就等于118了,这是为什么啊
先谢谢一楼的回答。那就是说这个read方法读出来的长度是不确定的?那总有一定的规律的吧(输入yahoo网址的时候第一次循环老是读出26个啊)?还是完全是巧合?能说清楚一点吗,本人刚学java不久,谢谢了。

谁说是尽量填满???
b只是当个缓冲区用。这个read方法返回实际读取的长度。
如果每次都一样,那就根本不用返回了。每次都一样长,那还叫流
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答