传统IO的特点

#1传统IO
#2 传统IO有两种方式:

 1、单线程方式
	     这种方式的io是阻塞的, 服务器的serverSocket只能为一个客户端socket服务,不能接收到新的客户端socket连接
	    、、、
		public static void main(String[] args) {
			try {
				// 开启一个serverSocket
				System.out.println("开启一个serverSocket");
				ServerSocket serverSocket = new ServerSocket(10101);
				while(true){
					Socket accept = serverSocket.accept();    // 阻塞
					System.out.println("受到一个连接");
					handle(accept);
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}		    

		private static void handle(Socket socket){
			byte[] bytes = new byte[1024];
			try {
				 
				InputStream inputStream= socket.getInputStream();   // 输入流inputStream   
			
				while (true) {
					int read = inputStream.read(bytes);    // 阻塞
					if (read != -1) {
						String s = new String(bytes, 0, read);
						System.out.println(s);
					}
					else {
						break;
					}
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			finally {
				try {
					System.out.println("socket关闭");
					socket.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
	    、、、
 2、多线程方式
 		多线程方式为每一个客户端socket创建一个单独的线程来处理,所以这种方式客户为多个客户端服务。
 		但是这种方式系统资源开销很大,不能有效的利用每个线程资源, 当客户端连接数量多起来的时,系统由于线程过多
 		会造成无法正常运行
			```
			public static void main(String[] args) {
					// 创建线程池
					ExecutorService newCachedThreadPool = Executors.newCachedThreadPool();
					try {
						// 开启一个serverSocket
						System.out.println("开启一个serverSocket");
						ServerSocket serverSocket = new ServerSocket(10101);
						while(true){
							Socket accept = serverSocket.accept();    // 阻塞
							System.out.println("受到一个连接");
							// 为每个客户端单独创建一个线程来处理
							newCachedThreadPool.execute(new Runnable() {
								@Override
								public void run() {
									// TODO Auto-generated method stub
									handle(accept);
								}
							});
						}
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			private static void handle(Socket socket){
				byte[] bytes = new byte[1024];
				try {
					 
					InputStream inputStream= socket.getInputStream();   // 输入流inputStream   
				
					while (true) {
						int read = inputStream.read(bytes);    // 阻塞
						if (read != -1) {
							String s = new String(bytes, 0, read);
							System.out.println(s);
						}
						else {
							break;
						}
					}
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				finally {
					try {
						System.out.println("socket关闭");
						socket.close();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
			}
			```
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值