热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javaInputStream文件读写网络UDP/TCP

2019独角兽企业重金招聘Python工程师标准javaio流传输操作字节流和字符流的区别:读写单位不同:字节流以字节(8bit&#

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

java io流 传输操作

201332_llB1_274829.gif 

字节流和字符流的区别:

读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,字符流就是 : 字节流+编码表。

处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。

纯文本数据优先考虑字符流 别的 字节流

常用    字节流:

FileInputStream                 //字符流读文件

FileOutputStream              //字符流写文件

BufferedInputStream         //带缓冲区的 读文件

BufferedOutputStream       //带缓冲区    写文件

字符流:

Writer Reader

FileReader                //文件读

FileWriter                //文件写

BufferedReader        //缓存读操作

BufferedWriter         //缓存写操作

创建一个可以往文件中写入字符数据的字符输出流对象,如果文件不存在,则会自动创建。如果文件存在,则会被覆盖。

因为不同系统换行符号不同所以,可以调用系统函数获得换行符号,便于不同系统移植

private static final String LINE_SEPARATOR = System.getProperty("line.separator");  //换行符

FileWriter fw = new FileWriter("demo.txt",true);  //创建一个文件
fw.write("abcde"+LINE_SEPARATOR+"hahaha");        //数据写入到临时存储缓冲区中。
fw.flush();                                       //数据缓冲区刷到文件中
fw.close();                                       //这个其实会自动调用 flush;上面那样写 可以实时保存

读文件 单个字符模式

FileReader fr = new FileReader("demo.txt");      //打开要读的文件
int ch = 0;
while((ch=fr.read())!=-1){                       //文件结束符 为 -1 ,获得单个字符System.out.println((char)ch);                
}
fr.close();

单个字符读,操作次数多,浪费资源,于是出现多个字符缓冲区方式读取

FileReader fr = new FileReader("demo.txt");
char[] buf = new char[1024];                  //一次读取 1024字节
int len = 0;
while((len=fr.read(buf))!=-1){System.out.println(new String(buf,0,len));
}
fr.close();

一个文件读取写入另一个文件  规范的写法 考虑抛异常

FileReader fr = null;
FileWriter fw = null;
try {fr = new FileReader("a.txt");fw = new FileWriter("b.txt");char[] buf = new char[BUFFER_SIZE];//缓冲区。 int len = 0;while((len=fr.read(buf))!=-1){fw.write(buf, 0, len);}} catch (Exception e) {throw new RuntimeException("读写失败");
}finally{if(fw!=null)  //证明打开的文件不为空try {fw.close();} catch (IOException e) {e.printStackTrace();}if(fr!=null)try {fr.close();} catch (IOException e) {e.printStackTrace();}
}

java本身带了缓存对象,可以直接调用  文件打开 操作

FileWriter fw = new FileWriter("buf.txt");
BufferedWriter bufw = new BufferedWriter(fw);    //
String line = null;
while((line=bufr.readLine())!=null){          //一次 读一行System.out.println(line);
}FileWriter fw = new FileWriter("buf.txt");
BufferedWriter bufw = new BufferedWriter(fw);
bufw.write("abcdef"+x);
bufw.newLine();
bufw.flush();
bufw.close();                           //关闭缓冲区 防止内存泄露  这个不需要关闭 文件

字节流例子

FileInputStream fis = new FileInputStream("bytedemo.txt");
byte[] buf = new byte[1024];
int len = 0;while((len=fis.read(buf))!=-1){                    //文件没结束System.out.println(new String(buf,0,len));
}FileOutputStream fos = new FileOutputStream("bytedemo.txt");fos.write("abcdefg".getBytes());          //文件中写入数据
//fos.flush();
fos.close();//关闭资源动作要完成。

拷贝一首MP3文件

FileInputStream fis = new FileInputStream("c:\\0.mp3");
BufferedInputStream bufis = new BufferedInputStream(fis);      //缓冲区方式FileOutputStream fos = new FileOutputStream("c:\\2.mp3");
BufferedOutputStream bufos = new BufferedOutputStream(fos);int ch = 0;
while((ch=bufis.read())!=-1){bufos.write(ch);
}bufos.close();                //关闭缓存区
bufis.close();

字符/字节流直接的转换   InputStreamReader、OutputStreamWriter

BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));    字节流到字符流

BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("b.txt")));

字符流道字节流  转换桥


java网络通信 UDP函数

DatagramSocket ds = new DatagramSocket(10000);         //UDP 绑定端口while(true){byte[] buf = new byte[1024];DatagramPacket dp = new DatagramPacket(buf,buf.length);       //UDP包对象ds.receive(dp);//阻塞式的。//4,通过数据包对象的方法,解析其中的数据,比如,地址,端口,数据内容。String ip = dp.getAddress().getHostAddress();int port = dp.getPort();String text = new String(dp.getData(),0,dp.getLength());    //数据System.out.println(ip+":"+port+":"+text);
}ds.close();

UDPsend

DatagramSocket ds = new DatagramSocket();           BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
String line = null;while((line=bufr.readLine())!=null){byte[] buf = line.getBytes();   DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.100"),10000);  //udp发送包ds.send(dp);    if("886".equals(line))break;
}ds.close();


TCP通信对象  客户端

Socket socket = new Socket("192.168.1.100",10002);          //服务器IP 端口OutputStream out = socket.getOutputStream();  //输出的信息
out.write("tcp 输出".getBytes());InputStream in = socket.getInputStream();        //接收到的信息
byte[] buf = new byte[1024];int len = in.read(buf);String  text = new String(buf,0,len);System.out.println(text);                socket.close();

服务器端

ServerSocket ss = new ServerSocket(10002);Socket s = ss.accept();                             //获得客户端对象String ip = s.getInetAddress().getHostAddress();   //获得客户端IPInputStream in = s.getInputStream();    //接收到的客户端数据
byte[] buf = new byte[1024];int len = in.read(buf);
String text = new String(buf,0,len);
System.out.println(ip+":"+text);OutputStream out = s.getOutputStream();   //发送到客户端数据
out.write("收到".getBytes());s.close();
ss.close();



转:https://my.oschina.net/u/274829/blog/313874



推荐阅读
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • MQTT技术周报:硬件连接与协议解析
    本周开发笔记重点介绍了在新项目中使用MQTT协议进行硬件连接的技术细节,涵盖其特性、原理及实现步骤。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文讨论了如何根据特定条件动态显示或隐藏文件上传控件中的默认文本(如“未选择文件”)。通过结合CSS和JavaScript,可以实现更灵活的用户界面。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • 计算机网络复习:第五章 网络层控制平面
    本文探讨了网络层的控制平面,包括转发和路由选择的基本原理。转发在数据平面上实现,通过配置路由器中的转发表完成;而路由选择则在控制平面上进行,涉及路由器中路由表的配置与更新。此外,文章还介绍了ICMP协议、两种控制平面的实现方法、路由选择算法及其分类等内容。 ... [详细]
author-avatar
翟志军2502905177
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有