public static void main(String[] args) throws IOException, InterruptedException { ServerSocket serverSocket = new ServerSocket(10086); System.out.println("准备接受信号"); Socket accept = serverSocket.accept(); System.out.println("接收到"+accept.getRemoteSocketAddress()+"的信号"); InputStream inputStream = accept.getInputStream(); BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream); byte []brr=new byte[1024*1088]; int read; int sum=0; File file = new File("net-app\\src\\com\\itheima\\d10brother\\ly.mp4"); BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(file)); while ((read=bufferedInputStream.read())!=-1){ System.out.println(Thread.currentThread().getName()+"正在读取中"); Thread.sleep(500); sum+=read; System.out.println(Thread.currentThread().getName()+"已经读取到"+sum+"字节"); bufferedOutputStream.write(brr,0,read); System.out.println(Thread.currentThread().getName()+"正在通过socket发送中,已发送"+sum+"字节"); } bufferedInputStream.close(); bufferedOutputStream.close(); System.out.println("复制完成"); }
时间: 2024-03-29 14:39:03 浏览: 51
C#中static void Main(string[] args) 参数示例详解
这段代码是一个Java程序,作用是从一个Socket连接中读取数据,并将读取的数据写入到一个本地文件中。具体流程如下:
1. 创建一个ServerSocket对象,指定端口号为10086,用于监听客户端的连接请求。
2. 调用ServerSocket的accept()方法,等待客户端连接,一旦接收到连接请求,就返回一个Socket对象,用于和客户端进行通信。
3. 获取Socket对象的输入流,使用BufferedInputStream进行包装,方便读取数据。
4. 创建一个byte数组,用于缓存读取的数据。
5. 创建一个File对象,指定本地文件路径,用于存储读取的数据。
6. 创建一个BufferedOutputStream对象,用于将读取的数据写入到本地文件中。
7. 使用while循环从输入流中读取数据,每次读取一定数量的数据,并将读取的数据写入到本地文件中。
8. 循环结束后,关闭输入流和输出流,输出复制完成的消息。
需要注意的是,在while循环中,读取数据的操作使用的是read()方法,这个方法每次只会读取一个字节,因此在写入数据的时候,需要将读取的字节数组的长度作为第三个参数传递给write()方法。同时,为了模拟复制文件的过程,代码中使用了Thread.sleep()方法来让程序暂停一段时间。
阅读全文