Java 流的使用总结
1. InputStreamReader和BufferedReader将流转化为文本
1) 从url中读取资源将其转化为json(每日一句写法)
package com.json;import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;import net.sf.json.JSONObject;public class Json {
public static void main(String[] args) {try {URL webUrl = new URL("http://open.iciba.com/dsapi/");HttpURLConnection urlConnection = (HttpURLConnection)webUrl.openConnection();urlConnection.setRequestMethod("GET");urlConnection.connect();InputStream inputStream = urlConnection.getInputStream();InputStreamReader reader = new InputStreamReader(inputStream); BufferedReader breader = new BufferedReader(reader);String speck = null;StringBuffer str = new StringBuffer();while ((speck = breader.readLine())!= null) {str.append(speck);}JSONObject dataJson=JSONObject.fromObject(str.toString());String response=(String) dataJson.get("note");// JSONObject Json = JSONObject.fromObject(str.toString());System.out.println(response);} catch (Exception e) {e.printStackTrace();}
}
}
2) 从url中读取资源将其转化为xml(天气预报写法)
package com.xml;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLEncoder;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;import javax.xml.parsers.*;import org.w3c.dom.Document;public class WeatherIo {private static final String getWeatherUrl = "http://php.weather.sina.com.cn/xml.php?password=DJOYnieT8234jlsK";public void getXml() throws Exception{// step 1: 获得dom解析器工厂(工作的作用是用于创建具体的解析器)DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();// step 2:获得具体的dom解析器DocumentBuilder db = dbf.newDocumentBuilder();String city = "武汉";city = URLEncoder.encode(city, "gb2312");String url = getWeatherUrl+"&city="+city+"&day=1"; URL webUrl = new URL(url);Document document = db.parse(webUrl.openStream()); InputStreamReader reader = new InputStreamReader(webUrl.openStream());BufferedReader breader = new BufferedReader(reader);//Document document = db.parse(webUrl.openStream());StringBuilder result = new StringBuilder();String line = null;while ((line=breader.readLine())!=null) {result.append(line);}System.out.println(result.toString());//解析document文件 取到一天的天气预报List onedayData = getOnedayData(document);}public List getOnedayData(Document document){try {List onedayData = new ArrayList();String city = "";//城市String status1 = "";//天气String status2 = "";String figure1 = "";//天气拼音String figure2 = "";String temperature1 = "";//温度String temperature2 = "";String direction1 = "";//风向String direction2 = "";String power1 = "";//风力String power2 = "";String savedate_weather = "";//时间city = document.getElementsByTagName("city").item(0).getFirstChild().getNodeValue();if(document.getElementsByTagName("status1").item(0).getFirstChild()!=null){status1 = document.getElementsByTagName("status1").item(0).getFirstChild().getNodeValue();}if(document.getElementsByTagName("status2").item(0).getFirstChild()!=null){status2 = document.getElementsByTagName("status2").item(0).getFirstChild().getNodeValue();}if(document.getElementsByTagName("figure1").item(0).getFirstChild()!=null){figure1 = document.getElementsByTagName("figure1").item(0).getFirstChild().getNodeValue(); }if(document.getElementsByTagName("figure2").item(0).getFirstChild()!=null){figure2 = document.getElementsByTagName("figure2").item(0).getFirstChild().getNodeValue(); }if(document.getElementsByTagName("temperature1").item(0).getFirstChild()!=null){temperature1 = document.getElementsByTagName("temperature1").item(0).getFirstChild().getNodeValue();}if(document.getElementsByTagName("temperature2").item(0).getFirstChild()!=null){temperature2 = document.getElementsByTagName("temperature2").item(0).getFirstChild().getNodeValue();}if(document.getElementsByTagName("direction1").item(0).getFirstChild()!=null){direction1 = document.getElementsByTagName("direction1").item(0).getFirstChild().getNodeValue();}if(document.getElementsByTagName("direction2").item(0).getFirstChild()!=null){direction2 = document.getElementsByTagName("direction2").item(0).getFirstChild().getNodeValue();}if(document.getElementsByTagName("power1").item(0).getFirstChild()!=null){power1 = document.getElementsByTagName("power1").item(0).getFirstChild().getNodeValue();}if(document.getElementsByTagName("power2").item(0).getFirstChild()!=null){power2 = document.getElementsByTagName("power2").item(0).getFirstChild().getNodeValue();}savedate_weather = document.getElementsByTagName("savedate_weather").item(0).getFirstChild().getNodeValue();onedayData.add(city);onedayData.add(status1);onedayData.add(status2);onedayData.add(figure1);onedayData.add(figure2);onedayData.add(temperature1);onedayData.add(temperature2);onedayData.add(direction1);onedayData.add(direction2);onedayData.add(power1);onedayData.add(power2);onedayData.add(savedate_weather);SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date date = format.parse(savedate_weather);SimpleDateFormat dateFm = new SimpleDateFormat("EEEE");//星期格式String xingqi = dateFm.format(date);onedayData.add(xingqi);return onedayData;} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();return null;} }
}
2. ObjectInputStream和ObjectoutputStream
1) ObjectoutputStream将java对象bean实例化在本地磁盘上
package com.serializable_txt.file;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;import com.serializable_txt.bean.Person;public class ObjectOutputStream1 {
public static void main(String[] args) throws FileNotFoundException, IOException {/**序列化,将对象保存在了本地硬盘上面 */Person pr1 = new Person("tom",18);Person pr2 = new Person("marry",20);Person pr3 = new Person("tomiay",18);File f = new File("c:ser1.txt");ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(f));out.writeObject(pr1);out.writeObject(pr2);out.writeObject(pr3);}
}
2) ObjectInputStream本地磁盘上文件读取为java对象bean
package com.serializable_txt.file;import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;import javax.imageio.stream.FileImageInputStream;import com.serializable_txt.bean.Person;@SuppressWarnings("unused")
public class ObjectInputStream2 {
public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {/**反序列化,读取本地硬盘上面信息,封装成对象 */File f = new File("c:ser1.txt");ObjectInputStream input = new ObjectInputStream(new FileInputStream(f));
// Person pr1 = (Person) input.readObject();
// System.out.println(pr1.getName());
// Person pr2 = (Person) input.readObject();
// System.out.println(pr2.getName());
// Person pr3 = (Person) input.readObject();
// System.out.println(pr3.getName());/** 循环读取,当出现EofException异常时,退出循环;*/while (true) {try {Person pr = (Person) input.readObject();System.out.println(pr.getName());} catch (Exception e) {if(e instanceof EOFException){break;}}}
}
}
3) 用到的bean(要序列化)
package com.serializable_txt.bean;import java.io.Serializable;
/** 序列化;标记接口*/
public class Person implements Serializable{
private String name;
private int age;
public String getName() {return name;
}
public void setName(String name) {this.name = name;
}
public int getAge() {return age;
}
public void setAge(int age) {this.age = age;
}
public Person() {
}
public Person(String name, int age) {this.name = name;this.age = age;
}}
3. DataInputStream和DataOutputStream
1) 存储和读取所实例化的对象的属性
package com.serializable_txt.file;import java.io.*;import com.serializable_txt.bean.Member;public class DataStreamDemo
{public static void main(String[] args) {Member[] members = {new Member("Justin",90),new Member("momor",95),new Member("Bush",88)};try{DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream(new File("f://members.txt")));for(Member member:members){//写入UTF字符串dataOutputStream.writeUTF(member.getName());//写入int数据dataOutputStream.writeInt(member.getAge());}//所有数据至目的地dataOutputStream.flush();//关闭流dataOutputStream.close();DataInputStream dataInputStream = new DataInputStream(new FileInputStream(new File("f://members.txt")));//读出数据并还原为对象for(int i=0;i<members.length;i++){//读出UTF字符串String name = dataInputStream.readUTF();//读出int数据int score = dataInputStream.readInt();members[i] = new Member(name,score);}//关闭流dataInputStream.close();//显示还原后的数据for(Member member : members){System.out.printf("%s\t%d%n",member.getName(),member.getAge());}}catch(IOException e){e.printStackTrace();}}
}
2) 用到的bean
package com.serializable_txt.bean;public class Member {private String name;private int age;public Member() {}public Member(String name, int age) {this.name = name;this.age = age;}public void setName(String name) {this.name = name;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public int getAge() {return age;}
}
4.PushbackInputStream流的使用
package net.nyist.io;import java.io.FileReader;
import java.io.IOException;
import java.io.PushbackReader;
import java.security.acl.Permission;public class PushBackTest {public static void main(String[] args) {try (// 创建一个PushbackReader对象,指定推回缓冲区的长度为64PushbackReader pr = new PushbackReader(new FileReader("src/net/nyist/io/PushBackTest.java"), 64);) {char[] buf = new char[32];// 用以保存上次读取字符串的内容String lastContent = "";int hasRead = 0;// 循环读取文件内容while ((hasRead = pr.read(buf)) > 0) {// 将读取的内容转化为字符串String content = new String(buf, 0, hasRead);int targetIndex = 0;// 将上次读取的字符串和本次读取的字符串拼接起来// 查看是否包含目标字符串,// 如果包含目标字符串if ((targetIndex = (lastContent + content).indexOf("new PushbackReader")) > 0) {// 将本次的内容和上次的内容一起推回缓冲区pr.unread((lastContent + content).toCharArray());// 重现定义一个长度为targetIndex的char类型的数组if (targetIndex > 32) {buf = new char[targetIndex];}// 再次读取指定长度的内容,即目标字符串之前的内容pr.read(buf, 0, targetIndex);// 答应读取指定长度的内容System.out.println(new String(buf, 0, targetIndex));System.exit(0);} else {// 打印上次读取的内容System.out.println(lastContent);// 将本次读取的内容设置为上次读取的内容lastContent = content;}}} catch (IOException ioe) {ioe.printStackTrace();}}}
5.ByteArrayOutputStream的使用 实现byte转化 在socket中,会常用这个
public static byte[] readStream(InputStream inStream) throws Exception{ByteArrayOutputStream outSteam = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len = -1;while( (len=inStream.read(buffer)) != -1){outSteam.write(buffer, 0, len);}outSteam.close();inStream.close();return outSteam.toByteArray();//new String (outSteam.toByteArray());}
**重点**
所有inputStream的read()方法,是一个字节的读取,而read(byte[])将返回的是读取了多少个字节
Java 流的使用总结相关推荐
- java流类图结构_java I/O 流总结
一.java 流操作有关的类和接口: 类 说明 Fil ...
- java文件流插入数据库_使用Java流查询数据库
java文件流插入数据库 在本文中,您将学习如何编写纯Java应用程序,这些应用程序能够处理现有数据库中的数据,而无需编写一行SQL(或类似的语言,例如HQL),而无需花费数小时将所有内容放在一起. ...
- jvm优化_使用Java流和In-JVM-Memory的超低延迟查询
jvm优化 自然界的基本规则(例如光速和通用信息论)对我们可以从传统系统体系结构中获得的最大性能设置了明显的限制. 了解您作为Java开发人员如何使用JVM技术和Java流将性能提高几个数量级. 例如 ...
- 1.1 Java流是什么?输入/输出流又是什么?
在 Java 中所有数据都是使用流读写的.流是一组有序的数据序列,将数据从一个地方带到另一个地方.根据数据流向的不同,可以分为输入(Input)流和输出(Output)流两种. 在学习输入和输出流之前 ...
- 关于java流的几个概念:IO、BIO、NIO、AIO,有几个人全知道?
转载自 关于java流的几个概念:IO.BIO.NIO.AIO,有几个人全知道? 关于同步.阻塞的知识我之前的文章有介绍,所以关于流用到这些概念与之前多线程用的概念一样. 下面具体来看看java中的几 ...
- java流与文件——正则表达式
[0]README 0.1) 本文描述转自 core java volume 2, 旨在理解 java流与文件--正则表达式 的相关知识: 0.2) there are my original sou ...
- java流与文件——内存映射文件
[0]README 0.1) 本文描述转自 core java volume 2, 旨在理解 java流与文件--内存映射文件 的相关知识: 0.2)内存映射文件的目的是: 提高访问速度, 缓冲区Bu ...
- java流与文件——对象流和序列化
[0]README 0.1) 本文描述转自 core java volume 2, 旨在理解 java流与文件--对象流和序列化 的相关知识: 0.2) for source code , pleas ...
- java流与文件——操作文件
[0]README 0.1) 本文描述转自 core java volume 2, 旨在理解 java流与文件--操作文件 的相关知识: 0.2) for source code, please vi ...
- java流与文件——java生成解压缩文件(夹)
[0]README 0.1) 本文描述转自 http://blog.csdn.net/chenssy/article/details/9622171 , 旨在理解 java流与文件--java生成解压 ...
最新文章
- 复习webpack的常用loader
- 摆脱阅读黑洞,退订RSS
- 【建议收藏】HTTP与HTTPS的区别
- JavaScript数据结构与算法——列表详解(上)
- SAP Cloud for Customer里图片数据读取的逻辑
- 服务器内存型号与频率,一张图看懂如何选择DDR4内存的频率和容量
- java mysql结果集_Java JDBC结果集的处理
- 敏捷开发绩效管理之五:敏捷开发生产率(上)(故事点估算)
- python代码混淆工具_有没有好的 python 混淆器 推荐一个
- hibernate级联删除问题
- Eigen库数据结构内存对齐问题
- Android Multimedia框架总结(十九)Camera2框架C/S模型之CameraService启动及与Client连接过程
- 常见问题-瑞友天翼应用虚拟化系统安装之前需要做什么准备
- 前端知识点——Web Sockets
- 云安全联盟CCSK认证获得CDM网络防御全球奖
- 管理者如何做好“冲突管理”
- Android接入TapTap踩坑
- 对多媒体框架的几点看法
- HBuilderX格式化css
- 【PDF处理】java将全图片的pdf压缩,输出新的pdf
热门文章
- 电子秤称重系统设计,HX711压力传感器,51单片机(Proteus仿真、C程序、原理图、论文等全套资料)
- python 元组使用场景_列表和元组(三):列表和元组的性能以及使用场景
- layui数据表格的使用
- WRF模型模拟时所遇到的问题及解决方法
- bugku--PHP代码审计-sha()函数比较绕过
- C# WINFORM 主窗口把数据传给子窗口,编辑后再返回主窗口
- 玩 原来有个 腾讯热腾
- 抖音上很火的3D立体动态相册
- 在Jetson Nano上学习ROS的记录(版本Ubuntu18.04,课程来源赵虚左老师的《ROS理论与实践》)第十二章 机器人导航(仿真)
- S-AES的加密与解密