BufferedReader读取视频、图片缺失及readLine()使用

  题目:从本地读取图片,通过Socket由服务器发送给客户端,客户端重命名图片,保存到当前路径。
  使用BufferedReader字符流操作,发现图片获取失败,查了一下做个小结。

参考文件
https://bbs.csdn.net/topics/370110335
https://www.cnblogs.com/dongrilaoxiao/p/6688107.html

/*** @author Administrator* @version 1.0 ** 创建一个多线程的TCP 服务器以及客户端,完成下面的功能: 服务端:读入客户端发给* 服务器端的字符串,在服务器当前目录下查找以该字符串作为文件名的文件,并把该文* 件内容发送给客户端。客户端:发送给服务器端一个字符串filename 表示服务器上的* 一个文件,然后 从服务器端读入文件内容,并起名叫server_filename 保存在当前* 目录。*/
public class FileThreadServer {public static void main(String[] args){ExecutorService es = Executors.newCachedThreadPool();ServerSocket listener = null;Socket socket = null;try {listener = new ServerSocket(7788);System.out.println("服务器已启动");while (true) {socket = listener.accept();es.submit(new FileThread(socket));}} catch (IOException e) {e.printStackTrace();}finally {try {if(socket != null)socket.close();if(listener != null)listener.close();if(es != null)es.shutdown();} catch (IOException e) {e.printStackTrace();}}}
}class FileThread implements Runnable{private Socket socket;public FileThread() {}public FileThread(Socket socket) {this.socket = socket;}public Socket getSocket() {return socket;}public void setSocket(Socket socket) {this.socket = socket;}@Overridepublic void run() {BufferedReader br = null;BufferedOutputStream bos = null;BufferedInputStream bis = null;try {InputStream is = socket.getInputStream();br = new BufferedReader(new InputStreamReader(is));//接收客户端发送的文件名String fileName = br.readLine();System.out.println("fileName:"+fileName);//当前目录查找文件是否存在boolean fileExistResult = checkFile(fileName);if(fileExistResult){OutputStream os = socket.getOutputStream();bos = new BufferedOutputStream(os);//将文件写到E盘bis = new BufferedInputStream(new FileInputStream(new File("e:\\"+fileName)));int len = 0;byte[] b = new byte[1024*4];//使用缓冲字节流读取写入while((len = bis.read(b))!=-1){bos.write(b, 0, len);}bos.flush();System.out.println("服务器发送数据完毕");}} catch (IOException e) {e.printStackTrace();}finally {try {if(br != null)br.close();if(bis != null)bis.close();if(bos != null)bos.close();} catch (IOException e) {e.printStackTrace();}}}public boolean checkFile(String fileName){File file = new File("e:\\");if(!file.exists()){System.out.println("搜索路径存在问题,无法查找");return false;}File[] files = file.listFiles();if(files == null){return false;}for (File f : files) {if(f.getName().equals(fileName)){return true;}}return false;}
}
/*** @author Administrator* @version 1.0**  创建一个多线程的TCP 服务器以及客户端,完成下面的功能: 服务端:读入客户端发给服*  务器端的字符串,在服务器当前目录下查找以该字符串作为文件名的文件,并把该文件内*  容发送给客户端。客户端:发送给服务器端一个字符串filename 表示服务器上的一个文*  件,然后 从服务器端读入文件内容,并起名叫server_filename 保存在当前目录。*/
public class FileClient {public static void main(String[] args){Socket socket = null;BufferedWriter bw = null;BufferedInputStream bis = null;BufferedOutputStream bos = null;try {socket = new Socket("127.0.0.1", 7788);bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));bw.write("ascii.jpg");bw.newLine();bw.flush();System.out.println("客户端发送文件名完毕");bis = new BufferedInputStream(socket.getInputStream());bos = new BufferedOutputStream(new FileOutputStream(new File("d:\\server_ascii.jpg")));int len = 0;byte[] b = new byte[1024*4];while((len = bis.read(b)) != -1){bos.write(b, 0, len);}bos.flush();System.out.println("客户端保存文件完毕");} catch (IOException e) {e.printStackTrace();}finally {try {if(bw != null)bw.close();if(bis != null)bis.close();if(bos != null)bos.close();if(socket != null)socket.close();} catch (IOException e) {e.printStackTrace();}}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1549256.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

带您了解《人工智能机器视觉应用工程师》

人工智能机器视觉应用是指利用人工智能技术和机器视觉技术相结合,使机器能够像人类一样通过视觉感知和理解环境,从而实现各种应用。随着人工智能技术的不断发展,机器视觉应用在各个领域得到了广泛应用。 在工业制造领域,人工智能机…

电商系统之链动2+1模式开发

在电商领域,创新的商业模式是推动市场增长与用户粘性的关键。链动21模式,作为一种基于社交裂变的分销策略,以其独特的团队构建与激励机制,在电商系统中展现出巨大的潜力。从程序员的技术角度出发,本文将深入探讨链动21…

汇编语言 访问CMOS RAM并打印时间(未完)

题目:以"年/月/日 时:分:秒"的格式,显示当前的日期,时间 提示:在此代码的基础上加以改造 assume cs:code code segment start:mov al,9 ;年out 70h,al ;传入9号单元的地址in al,71h ;取9号单元的内容,高4位为十位、低4位为各位mov ah,almov cl,4shr ah,…

最详细!适合AI大模型零基础入门的学习路线+学习方法+学习资料,全篇干货,建议收藏!

前言 随着ChatGPT的横空出世,大模型时代正式来临。千亿甚至万亿参数的大模型陆续出现,各大企业、高校纷纷推出自己的大模型,这标志着通用智能时代的到来。对于零基础的初学者来说,如何快速入门AI大模型,抓住这个时代的…

别再使用[]来获取字典的值了,来尝试一下这些方法

字典 在Python中,字典(Dictionary)是一种非常灵活的数据结构,用于存储键值对(key-value pairs)。每个键都是唯一的,并且与某个值相关联。字典是Python中处理映射关系(即一个键对应一…

数据结构与算法——Java实现 22.有效的括号

目录 22. 有效的括号 思路 接口 数组实现类 有效的括号 力扣 直到有一天,我不会再问离开的人为什么 —— 24.9.28 22. 有效的括号 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。…

【网站推荐】favicon图标生成

在制作网站的过程中,图标和 Favicon 是不可或缺的一部分。Favicon 是浏览器标签、书签和其他地方显示的小图标,它不仅可以增强网站的品牌识别度,还能提升用户体验。一个精美的 Favicon 可以让您的网站在众多标签中脱颖而出,吸引用…

信息学奥赛复赛复习06-CSP-J2020-02直播获奖-向上取整、向下取整、整数除法、最大值、最小值、计数排序

PDF文档回复:20240928 1 2020 CSP-J 题目1 优秀的拆分 [题目描述] NOI2130 即将举行。为了增加观赏性,CCF 决定逐一评出每个选手的成绩,并直播即时的获奖分数线。本次竞赛的获奖率为 w%,即当前排名前 w% 的选手的最低成绩就是即时的分数线 …

集合框架 - Map双列集合

01 概述 02 常用方法 03 遍历方式 【快捷键】&#xff1a;ctrlaltv 【说明】&#xff1a;Map.Entry<xx,xx>中&#xff0c;Entry是Map集合中的一个接口&#xff0c;但接口是不能创建对象的&#xff0c;它底层是通过使用Entry的实现类对象来封装键值对数据的。 【说明】&a…

LLM大模型学习:致AI新手掌握这些经验,助你少走三年弯路!

这篇文章&#xff0c;我将结合自己在大模型领域的经验&#xff0c;给大家详细聊聊新人应该如何转行大模型赛道&#xff1f; 比如大模型都有哪些方向&#xff1f;各方向的能力要求和岗位匹配&#xff1f;新手转行大模型常踩的坑和常见的误区&#xff1f;以及入行大模型最顺滑的…

代码为笔,合作作墨,共绘共赢画卷———未来之窗行业应用跨平台架构

合作共赢&#xff0c;代码同创&#xff0c;成就非凡 一、资源整合方面 1.1. 技术资源共享 - 不同的合作伙伴可能在技术领域各有所长。例如&#xff0c;一方可能擅长前端用户界面设计&#xff0c;具有丰富的交互设计经验&#xff0c;能够打造出美观、易用的预订界面&#xff…

Hadoop三大组件之MapReduce(一)

Hadoop之MapReduce 1. MapReduce是什么 MapReduce是一个分布式运算程序的编程框架&#xff0c;旨在帮助用户开发基于Hadoop的数据分析应用。它的核心功能是将用户编写的业务逻辑代码与自带的默认组件整合&#xff0c;形成一个完整的分布式运算程序&#xff0c;并并发运行在一…

Codeforces Round 975 (Div. 2)

传送门&#xff1a;https://codeforces.com/contest/2019 B. All Pairs Segments 题意&#xff1a; 首先样例解释一下&#xff1a; 一共有&#xff1a;[1,2],[1,3],[1,5],[1,6],[1,7],[2,3],[2,5],[2,6],[2,7],[3,5],[3,6],[3,7],[5,6],[5,7],[6,7] 点 1&#xff0c;7 在5个…

使用MessagePipe实现进程间通信

1、MessagePipe介绍 可以用于.NET和Unity上面的高性能的内存/分布式消息传递管道。适用于发布/订阅模式、CQRS的中介模式、Prism中的EventAggregator、IPC&#xff08;进程间通信&#xff09;-RPC等。 支持&#xff1a; 依赖注入过滤器管道更好的事件同步/异步带键值的/无键…

c++11~c++20 内联命名空间

在工作&#xff0c;我们经常会引入第三方库&#xff0c;偶尔会碰到同名的函数和类型&#xff0c;造成编译冲突的问题。一般我们可以使用命名空间&#xff0c;例如 #include <iostream> #include <iostream> using namespace std;namespace S1 {void foo(){cout &l…

基于python数据采集的可视化数据大屏,数据驱动的界面。

众所周知&#xff0c;可视化大屏离不开数据的采集&#xff0c;正式有了各种格式化的数据供给&#xff0c;可视化大屏才千姿百态&#xff0c;在数据采集方面&#xff0c;python优势什么明显&#xff0c;为大家分享一下。 一、python是什么 Python是一种高级、通用、解释型编程…

服装品牌小程序展示承载服务

服装大小品牌众多&#xff0c;还包括多区域的门店商家合作批发、咨询等&#xff0c;品牌或经销商想要获得更多生意&#xff0c;线上渠道往往是必备的&#xff0c;品牌宣传、获客转化及持续的信息干货输出等。 线上渠道多样化&#xff0c;尤其是微信、百度、抖音、快手等平台聚…

具身智能综述:鹏城实验室中大调研近400篇文献,深度解析具身智能

具身智能是实现通用人工智能的必经之路&#xff0c;其核心是通过智能体与数字空间和物理世界的交互来完成复杂任务。近年来&#xff0c;多模态大模型和机器人技术得到了长足发展&#xff0c;具身智能成为全球科技和产业竞争的新焦点。然而&#xff0c;目前缺少一篇能够全面解析…

Linux进程切换以及调度算法

目录 Linux进程切换以及调度算法 Linux进程切换介绍 前置知识 进程切换过程分析 调度算法 补充知识 Linux进程切换以及调度算法 Linux进程切换介绍 前面提到&#xff0c;分时操作系统下&#xff0c;CPU会在多个进程中做高速切换以实现多个进程看似同时执行的&#xff0…

防伪溯源查询系统V1.0.5

多平台&#xff08;微信小程序、H5网页&#xff09;二维码扫码输码防伪溯源查询系统&#xff0c;拥有强大的防伪码生成功能&#xff08;内置多种生成规则&#xff09;、批量导出防伪码数据、支持代理商管理端&#xff08;可批量对自己防伪码进行操作处理&#xff09;、文章资讯…