热门标签 | 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



推荐阅读
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • Java如何导入和导出Excel文件的方法和步骤详解
    本文详细介绍了在SpringBoot中使用Java导入和导出Excel文件的方法和步骤,包括添加操作Excel的依赖、自定义注解等。文章还提供了示例代码,并将代码上传至GitHub供访问。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • 本文介绍了GregorianCalendar类的基本信息,包括它是Calendar的子类,提供了世界上大多数国家使用的标准日历系统。默认情况下,它对应格里高利日历创立时的日期,但可以通过调用setGregorianChange()方法来更改起始日期。同时,文中还提到了GregorianCalendar类为每个日历字段使用的默认值。 ... [详细]
  • php缓存ri,浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
    thinkPHP的F方法只能用于缓存简单数据类型,不支持有效期和缓存对象。S()缓存方法支持有效期,又称动态缓存方法。本文是小编日常整理有关thinkp ... [详细]
  • 本文整理了Java中java.lang.NoSuchMethodError.getMessage()方法的一些代码示例,展示了NoSuchMethodErr ... [详细]
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社区 版权所有