您好,欢迎访问一九零五行业门户网

Java中如何利用while循环语句处理关键环节

java代码
public void handleconnection(socket connectiontohandle) {   
new thread(new connectionhandler(connectiontohandle)).
start();   
}   
public void handleconnection(socket connectiontohandle) {  
new thread(new connectionhandler(connectiontohandle)).
start();  


我们对 remotefileserver 所做的大改动就体现在这个方法上。我们仍然在服务器接受一个连接之后调用 handleconnection() ,但现在我们把该 socket 传递给 connectionhandler 的一个实例,它是 runnable 的。我们用 connectionhandler 创建一个新 thread 并启动它。connectionhandler 的 run() 方法包含socket 读/写和读 file 的代码,这些代码原来在 remotefileserver 的 handleconnection() 中。
4. 处理连接:第 2 部分
这里是 connectionhandler 类的结构:
java代码
import java.io.*;   import java.net.*;   public class connectionhandler implements runnable{   socket sockettohandle;   public connectionhandler(socket asockettohandle) {   sockettohandle = asockettohandle;   }   public void run() {   }   }   import java.io.*;  import java.net.*;  public class connectionhandler implements runnable{  socket sockettohandle;  public connectionhandler(socket asockettohandle) {  sockettohandle = asockettohandle;  }  public void run() {  }
这个助手类相当简单。跟我们到目前为止的其它类一样,我们导入 java.net 和 java.io 。该类只有一个实例变量 sockettohandle ,它保存由该实例处理的 socket 。类的构造器用一个 socket 实例作参数并将它赋给 sockettohandle 。
请注意该类实现了 runnable 接口。实现这个接口的类都必须实现 run() 方法,我们的类就是这样做的。稍后我们将探究 run() 的细节。现在只需知道它将实际处理连接,所用的代码跟我们先前在 remotefileserver 类中看到的是一样的。
实现 run()
这里我们实现 run() 方法,它将攫取我们的连接的流,用它来读写该连接,并在任务完成之后关闭它:
java代码
public void run() {   try {   printwriter streamwriter = new printwriter(sockettohandle.getoutputstream());   bufferedreader streamreader =   new bufferedreader(new inputstreamreader(sockettohandle.getinputstream()));   string filetoread = streamreader.readline();   bufferedreader filereader = new bufferedreader(new filereader(filetoread));   string line = null;   while ((line = filereader.readline()) != null)   streamwriter.println(line);   filereader.close();   streamwriter.close();   streamreader.close();   } catch (exception e) {   system.out.println(error handling a client:  + e);   }   }   public void run() {  try {  printwriter streamwriter = new printwriter(sockettohandle.getoutputstream());  bufferedreader streamreader =  new bufferedreader(new inputstreamreader(sockettohandle.getinputstream()));  string filetoread = streamreader.readline();  bufferedreader filereader = new bufferedreader(new filereader(filetoread));  string line = null;  while ((line = filereader.readline()) != null)  streamwriter.println(line);  filereader.close();  streamwriter.close();  streamreader.close();  } catch (exception e) {  system.out.println(error handling a client:  + e);  }  }
connectionhandler的 run() 方法所做的事情就是 remotefileserver 上的 handleconnection() 所做的事情。首先,我们把 inputstream 和 outputstream 分别包装(用 socket 的 getoutputstream() 和 getinputstream() )进 bufferedreader 和 printwriter 。然后我们用这些代码逐行地读目标文件:
java代码
filereader filereader = new filereader(new file(streamreader.readline()));   bufferedreader bufferedfilereader = new bufferedreader(filereader);   string line = null;   while ((line = bufferedfilereader.readline()) != null) {   streamwriter.println(line);   }   filereader filereader = new filereader(new file(streamreader.readline()));  bufferedreader bufferedfilereader = new bufferedreader(filereader);  string line = null;  while ((line = bufferedfilereader.readline()) != null) {  streamwriter.println(line);  }
请记住我们应该从客户机获取一条有效的文件路径,这样用该路径名构造一个新 file ,把它包装进 filereader 以处理读文件的操作,然后把它包装进 bufferedreader 以让我们逐行地读该文件。我们在 java while循环语句中调用 bufferedreader 上的 readline() 直到不再有要读的行。请记注,对 readline() 的调用将造成阻塞,直到有字节来到为止。我们获取一些字节之后就把它们放到本地的 line 变量中,然后写出到客户机上。
以上就是java中如何利用while循环语句处理关键环节的详细内容。
其它类似信息

推荐信息