您的位置:首页 > 编程语言 > Java开发

关于java 中流读取时遇到的阻塞和返回-1的问题探究

2013-10-24 20:38 656 查看
       最近在做一些关于网络方面的开发,常用到java中流的读取,其中有一个问题困扰了我好久,就是流的阻塞和返回-1的问题。

     案例1、

看代码:

package io;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
ServerSocket serverSocket = new ServerSocket(4887);
Socket client= serverSocket.accept();

InputStream is= client.getInputStream();

byte[] buffer= new byte[4];
int len=-1;

len=is.read(buffer);
System.out.println(new String (buffer,0,len)+"  "+len);
len=is.read(buffer);
System.out.println(new String(buffer,0,len)+"  "+len);
System.out.println("server over 1");

}

}

package io;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;

public class Client {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("127.0.0.1", 4887);
OutputStream out= socket.getOutputStream();
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
String line=br.readLine();
out.write(line.getBytes());
out.flush();
//	out.close();

Thread.sleep(100000);

}
}

数据:

client输入

abcdef

server输出

abcd  4

ef  2

server over 1

client输入

abcd

server输出

abcd  4

 

     案例2、

看代码:

package io;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
ServerSocket serverSocket = new ServerSocket(4887);
Socket client= serverSocket.accept();

InputStream is= client.getInputStream();

byte[] buffer= new byte[4];
int len=-1;

while((len=is.read(buffer))!=-1){
System.out.println(new String (buffer,0,len)+"  "+len);
}

System.out.println("server over 1");

}

}


 

package io;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;

public class Client {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("127.0.0.1", 4887);
OutputStream out= socket.getOutputStream();
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
String line=br.readLine();
out.write(line.getBytes());
out.flush();
//	out.close();

Thread.sleep(100000);

}
}

数据:

client输入

abcdef

server输出

abcd  4

ef  2

 

client输入

abcd

server输出

abcd  4

 

 

     案例3、

看代码:

package io;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
ServerSocket serverSocket = new ServerSocket(4887);
Socket client= serverSocket.accept();

InputStream is= client.getInputStream();

System.out.println(1+"  "+is.read());
System.out.println(2+"  "+is.read());
System.out.println(3+"  "+is.read());
System.out.println(4+"  "+is.read());
System.out.println(5+"  "+is.read());
System.out.println("server over 1");

}

}

package io;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;

public class Client {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("127.0.0.1", 4887);
OutputStream out= socket.getOutputStream();
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
String line=br.readLine();
out.write(line.getBytes());
out.flush();
Thread.sleep(100000);

}
}


 

数据:

client输入

abcd

server输出

1  97

2  98

3  99

4  100

 

 

     案例4、

看代码:

package io;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
ServerSocket serverSocket = new ServerSocket(4887);
Socket client= serverSocket.accept();

InputStream is= client.getInputStream();

int t=-1;
while((t=is.read() )!=-1){
System.out.println(t);
}
System.out.println("server over 1");

}

}


 

package io;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;

public class Client {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("127.0.0.1", 4887);
OutputStream out= socket.getOutputStream();
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
String line=br.readLine();
out.write(line.getBytes());
out.flush();
//	out.close();

Thread.sleep(100000);

}
}

数据:

client输入

abcdef

server输出

97

98

99

100

101

102

 

     案例5、

看代码:

package io;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
ServerSocket serverSocket = new ServerSocket(4887);
Socket client= serverSocket.accept();

InputStream is= client.getInputStream();

int t=-1;
while((t=is.read() )!=-1){
System.out.println(t);
}
System.out.println("server over 1");

}

}

 

package io;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;

public class Client {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("127.0.0.1", 4887);
OutputStream out= socket.getOutputStream();
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
String line=br.readLine();
out.write(line.getBytes());
out.flush();
out.close();
Thread.sleep(100000);

}
}


数据:

client输入

abcdef

server输出

97

98

99

100

101

102

server over 1

  案例6、

看代码:

package io;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
ServerSocket serverSocket = new ServerSocket(4887);
Socket client= serverSocket.accept();

InputStream is= client.getInputStream();

int t=-1;
while((t=is.read() )!=-1){
System.out.println(t);
}
System.out.println("server over 1");
t=-1;
while((t=is.read() )!=-1){
System.out.println(t);
}
System.out.println("server over 2");

}

}


 

package io;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;

public class Client {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("127.0.0.1", 4887);
OutputStream out= socket.getOutputStream();
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
String line=br.readLine();
out.write(line.getBytes());
out.flush();
out.close();

out= socket.getOutputStream();
out.write("def".getBytes());
out.flush();
out.close();
Thread.sleep(100000);

}
}


 

数据:

client输入

abcdef

Exception in thread "main" java.net.SocketException: Socket is closed

 at java.net.Socket.getOutputStream(Socket.java:828)

 at io.Client.main(Client.java:18)

server输出

97

98

99

100

101

102

server over 1

server over 2

总结:除了在最后两个案例中关闭流时,一直没有返回-1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息