关于java 中流读取时遇到的阻塞和返回-1的问题探究
2013-10-24 20:38
656 查看
最近在做一些关于网络方面的开发,常用到java中流的读取,其中有一个问题困扰了我好久,就是流的阻塞和返回-1的问题。
案例1、
看代码:
数据:
client输入
abcdef
server输出
abcd 4
ef 2
server over 1
client输入
abcd
server输出
abcd 4
案例2、
看代码:
数据:
client输入
abcdef
server输出
abcd 4
ef 2
client输入
abcd
server输出
abcd 4
案例3、
看代码:
数据:
client输入
abcd
server输出
1 97
2 98
3 99
4 100
案例4、
看代码:
数据:
client输入
abcdef
server输出
97
98
99
100
101
102
案例5、
看代码:
client输入
abcdef
server输出
97
98
99
100
101
102
server over 1
案例6、
看代码:
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
案例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
相关文章推荐
- java: 关于从jar中读取资源遇到的问题getClass().getResource(...)
- 关于读取HttpWebRequest获取的服务器返回流的问题总结
- 学习Java中所遇到问题,关于为什么List为什么会设置成接口
- 关于flex 和java上传是用FileReference 时候遇到的问题
- 关于Java读取文件操作时路径中的斜杠问题
- Java关于读取配置文件Parsing failed.的问题org.logicalcobwebs.proxool.ProxoolException: Parsing failed.
- C++与Java使用SOCKET通信遇到的一种阻塞问题的解决
- 关于返回函数一章节中遇到的问题
- 关于java socket 传输文件时遇到的问题
- 关于java中JDialog的阻塞设置问题
- 关于 java InputStream读取数据问题
- 关于应用程序图片在保存读取显示所遇到的问题。
- 关于android编程遇到java.lang.OutOfMemoryError: bitmap size exceeds VM budget此类问题的原因及解决办法
- 关于java中返回值的问题void
- c++关于结尾遇到‘\n’或其他特殊字符结束读取的问题(个人总结,大神勿喷)
- 工作中遇到关于流的问题以及java1.7中的 try-with-resources的
- 关于解决java读取excel文件遇空行抛空指针的问题 !
- Android JNI里c++调用java时遇到的FindClass返回0的问题
- 刚学java的小白想问个关于读取键盘输入数字的问题
- 关于java读取文本文件乱码的问题