日报 18/06/25 26

  io流

  • available

    public int available()throws IOException
    返回从该输入流中可以读取(或跳过)的字节数的估计值,而不会被下一次调用此输入流的方法阻塞。 下一个调用可能是同一个线程或另一个线程。 这个多个字节的单个读取或跳过将不会被阻塞,但可以读取或跳过较少的字节。

    注意,尽管一些实现InputStream将在流中返回的字节总数,许多人不会。 使用此方法的返回值分配用于保存此流中的所有数据的缓冲区是绝对不正确的。

    子类此方法的实现可以选择抛出IOException如果输入流已通过调用关闭close()方法。

    available类方法InputStream总是返回0

    这个方法应该被子类覆盖。

    结果
    当输入流到达输入流的末尾时,可以从该输入流中读取(或跳过)的字节数,而不阻塞的字节数 0
    异常
    IOException - 如果发生I / O错误。  

 注解

①如果要从网络中下载文件时,我们知道网络是不稳定的,也就是说网络下载时,read()方法是阻塞的,说明这时我们用inputStream.available()获取不到文件的总大小。
此时就需要通过
HttpURLConnection httpconn = (HttpURLConnection)url.openConnection();
httpconn.getContentLength();//获取文件长度
来获取文件的大小。
②如果是本地文件的话,用此方法就返回实际文件的大小。
③这个方法其实是通过文件描述符获取文件的总大小,而并不是事先将磁盘上的文件数据全部读入流中,再获取文件总大小。
中文名
文件描述符
外文名
file descriptor
作    用
内核利用文件描述符来访问文件
形    式
非负整数
文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于UNIX、Linux这样的操作系统
package com.b3.unit3.c1;

import java.io.*;

/**
*使用BufferedReader读取文件内容(字符流)
*/
public class BufferedReaderTest04 {
public static void main(String[] args) {
/*
* 创建输入流 Reader
* BufferedReader和FileReader联合使用
* 效率高 底层有默认的缓冲区 还可以逐行读取
*/


//创建BufferedReader对象 传递Reader的对象
BufferedReader br=null;
Reader reader=null;
try {
reader = new FileReader("d:/hello.txt");
br=new BufferedReader(reader);
//一行一行的读取
String line=null;
while((line=br.readLine())!=null){
System.out.println(line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
//关闭流 先开的后关
try {
br.close();
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

 

package com.b3.unit3.c1;

import java.io.*;

/**
* 使用BufferedWriter写入文件(字符流)
*/
public class BufferedWriterTest06 {
public static void main(String[] args) {
try {
//创建输出流对象
Writer writer=new FileWriter("d:/hello.txt",true);
//创建BufferedWriter对象
BufferedWriter bw=new BufferedWriter(writer);
//换行
bw.newLine();
bw.write("北京也爱你!");
bw.newLine();
bw.write("北京也爱你!");
bw.close();
writer.close();

//获取输入流
Reader reader=new FileReader("d:/hello.txt");
BufferedReader br=new BufferedReader(reader);
String line=null;
while((line=br.readLine())!=null){
System.out.println(line);
}
br.close();
reader.close();
} catch (IOException e) {
e.printStackTrace();
}


}
}

 

package com.b3.unit3.c1;

import java.io.*;

/**
* 读取2进制文件
*/
public class DataInputStreamTest08 {
public static void main(String[] args) throws Exception {
//创建输入流
InputStream fis = new FileInputStream("d:/mm.mp3");
//读取2进制文件
DataInputStream dis = new DataInputStream(fis);

//复制文件到另一个目录
OutputStream fos = new FileOutputStream("d:/U1/慢慢.mp3");
//以2进制的方式输出到指定的目录
DataOutputStream dos = new DataOutputStream(fos);

//开始读取
int data;
while ((data = dis.read()) != -1) {
//写入
dos.write(data);
}
dos.close();
fos.close();
dis.close();
fis.close();
}
}
 

 

package com.b3.unit3.c1;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

/**
* 使用FileInputStream读取文件内容(字节流)
*
* 所有的输入流都有 读 的方法
* 所有的输出流都有 写 的方法
*
* 输入输出流都是相对于计算机的内存而言
*
* 字节输入流的基类是 InputStream
* 字节输出流的基类是 OutputStream
*
* 字符输入流的基类是 Reader
* 字符输出流的基类是 Writer
*
*
* utf-8 :中文字符以及中文都是占3个字节! 数字和字母都是占1个!
* GBK: 中文字符以及中文都是占2个字节!
*/
public class FileInputStreamTest {

public static void main(String[] args) {
InputStream stream = null;
try {
stream = new FileInputStream("d:/hello.txt");
System.out.println("可读取的字节数:" + stream.available());
int num = 0;
while ((num = stream.read()) != -1) {
// 出现中文乱码 因为utf-8中中文占3个字节
System.out.println((char) num);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
// 关闭流
try {
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}

}

}

 

package com.b3.unit3.c1;

import java.io.FileReader;
import java.io.Reader;

/**
* .使用FileReader读取文件内容(字符流)
*/
public class FileReaderTest03 {
public static void main(String[] args) throws Exception {
//获取当前的编码格式
System.out.println("使用的编码为:"+System.getProperty("file.encoding"));
//创建输入流 Reader
Reader reader=new FileReader("d:/hello.txt");
//因为读取的字符 创建数据的中转站 会有多余的空格产生
char [] words=new char[1024];
int num;
//需要字符串的 拼接
StringBuilder sb=new StringBuilder();
while((num=reader.read(words))!=-1){
sb.append(words);
}
System.out.println(sb.toString());
//关闭输入流
reader.close();
}
}

package com.b3.unit3.c1;

import java.io.*;

/**
* 使用InputStreamReader解决中文乱码问题
*/
public class InputStreamReaderTest07 {
public static void main(String[] args) {

BufferedReader br=null;
InputStreamReader isr=null;
InputStream stream=null;
try {
//创建输入流对象
stream=new FileInputStream("d:/hello.txt");
System.out.println("文件的大小:"+stream.available());
//使用InputStreamReader来解决乱码
isr=new InputStreamReader(stream, "utf-8");
//读取
br=new BufferedReader(isr);
String line=null;
while((line=br.readLine())!=null){
System.out.println(line);
}

} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
br.close();
isr.close();
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

 

package com.b3.unit3.c1;

import java.io.File;
import java.io.IOException;

/**
* 使用File操作文件(字节流)
*/
public class IoTest {

public static void main(String[] args) throws IOException {
/* 01.删除或者创建文件
* File file=new File("e:/io.txt");
addOrDel(file); */

File file = new File("d:/java/hello");
//file.mkdir(); 只能创建一层目录
file.mkdirs(); //同时创建多层目录
}

/**
* 删除或者创建文件
*/
public static void addOrDel(File file) throws IOException {
if (!file.exists()) { //判断文件是否存在
if (file.createNewFile()) {//创建成功
System.out.println("创建成功!");
System.out.println("是否是文件:" + file.isFile());
System.out.println("文件名称:" + file.getName());
System.out.println("文件大小:" + file.length());
System.out.println("文件的绝对路径:" + file.getAbsolutePath());
} else {
System.out.println("创建失败");
}
} else {
System.out.println("文件已经存在!");
if (file.delete()) {//删除文件
System.out.println("删除成功!");
}
}
}

}

 

package com.b3.unit3.c1;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

/**
* 使用OutputStream写入文件内容(字节流)
*
* 01.java项目的编码格式 要和输出文件的编码一致 都是UTF-8
* 02.如果系统中没有指定的文件,会默认创建
* 03.如果重复输出,则上次的内容会被覆盖
* 如果不想覆盖!使用重载!在第二个参数的位置输入true
*/
public class OutputStreamTest {

public static void main(String[] args) {
OutputStream stream = null;
try {
// stream = new FileOutputStream("e:/hello.txt");
stream = new FileOutputStream("d:/hello.txt", true); // 在原本的内容上拼接
// 这里是整体作为一个参数
stream.write("中国1".getBytes());
stream.write("中国2".getBytes());
// 强行把缓冲区的数据写到输出流中
stream.flush();
stream.write("中国3".getBytes());

} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}

}

}
 

 

package com.b3.unit3.c1;

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

/**
* 使用OutputStreamWriter写入文件(字符流)
*/
public class OutputStreamWriterTest05 {
public static void main(String[] args) {
try {
/*
* 输出流 默认的会给我们创建新的文件
* 不使用第二个参数! 那么默认会覆盖之前的内容
* ctrl +shift +t 选中需要查询的类或者接口
*/
Writer writer=new FileWriter("d:/hello.txt",true);
writer.write("我爱北京天安门!");
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

 

package com.b3.unit3.c1;

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

/**
* 序列化
*/
public class SerializableTest {
public static void main(String[] args) throws Exception { //序列化操作
//首先实例化一个对象
Student student=new Student(1, 500, "小白2");
//想序列化?从内存中 放入 持久化的介质中 输出流
FileOutputStream fos=new FileOutputStream("d:/student.txt");
ObjectOutputStream oos=new ObjectOutputStream(fos);
//开始持久化
oos.writeObject(student);
oos.close();
fos.close();
}
}

 

package com.b3.unit3.c1;

import java.io.Serializable;

/**
* 序列化和反序列化
*
* 序列化:将内存中对象的状态或者信息 转换成 持久化的过程!
* 反序列化:把持久化的对象 变成 内存中的一个对象的过程!
* 目的:
* 01.使自定义的对象 持久化!对象本身是在内存中的!我们想把它持久化!
* 02.把对象从一个地方传递到另一个地方!
* 03.使程序具有维护性!
*
* 怎么才能实现对象的序列化??
* 1.让对象所属的类 实现Serializable 接口 之后, 这个类 就可以序列化了!
* Serializable:只是一个能否被序列化的标记!
*/
public class Student implements Serializable { //实体类

private Integer id;
private Integer age;
private String name;

@Override
public String toString() {
return "Student [id=" + id + ", age=" + age + ", name=" + name + "]";
}
public Student() {
super();
}
public Student(Integer id, Integer age, String name) {
super();
this.id = id;
this.age = age;
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}



}
package com.b3.unit3.c1;

import java.io.FileInputStream;
import java.io.ObjectInputStream;

/**
* 反序列化
* 需要和 序列化时候的包名 一致 不然 没法反序列化
*/
public class StudentTest {
public static void main(String[] args) throws Exception {
// 从文件中把对象 拿到 内存中 输入流
FileInputStream fis = new FileInputStream("d:/student.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
// 读取文件中的对象
Student student = (Student) ois.readObject();
System.out.println(student.getId());
System.out.println(student.getAge());
System.out.println(student.getName());
ois.close();
fis.close();
}
}

 文件描述符

#include <stdio h="">
#include <stdlib h="">
#include <fcntl h="">
#include <sys types="" h="">
#include <unistd h="">
#include <sys types="" h="">

int main(void)
{
int fd, pid, status;
char buf[10];
if ((fd = open("./test.txt", O_RDONLY)) < 0) {
perror("open"); exit(-1);
}
if ((pid = fork()) < 0) {
perror("fork"); exit(-1);
} else if (pid == 0) { //child
read(fd, buf, 2);
write(STDOUT_FILENO, buf, 2);
} else { //parent
sleep(2);
lseek(fd, SEEK_CUR, 1);
read(fd, buf, 3);
write(STDOUT_FILENO, buf, 3);
write(STDOUT_FILENO, "\n", 1);
}
return 0;
}

</sys></unistd></sys></fcntl></stdlib></stdio>

 

转载于:https://www.cnblogs.com/yunfeioliver/p/9227968.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java8 迭代set集合_JavaSE(八)集合之Set

2.2、HashSet特点不能保证元素的排列顺序&#xff0c;顺序可能和添加的顺序不同&#xff0c;顺序也有可能发生变化。HashSetf不是同步的&#xff0c;如果多个线程同时来访问一个 HashSet&#xff0c;假设有两个或者两个以上线程同时修改了HashSet 集合时&#xff0c;则必须通过…

AI 发展方向大争论:混合AI ?强化学习 ?将实际知识和常识整合到AI中 ?

一个仿人机器人的延伸手。机器人常常使用强化学习来加以训练来源&#xff1a;云头条作者&#xff1a;Ben Dickson是一名软件工程师&#xff0c;还是探讨技术在如何解决和带来问题的TechTalks博客的创始人。2010年代对于AI界来说意义重大&#xff0c;这归功于深度学习领域取得了…

Leetcode--621. 任务调度器

给定一个用字符数组表示的 CPU 需要执行的任务列表。其中包含使用大写的 A - Z 字母表示的26 种不同种类的任务。任务可以以任意顺序执行&#xff0c;并且每个任务都可以在 1 个单位时间内执行完。CPU 在任何一个单位时间内都可以执行一个任务&#xff0c;或者在待命状态。 然…

吴恩达:2020 年,这些 AI 大事件让我无法忘怀...

作者&#xff1a;吴恩达编译&#xff1a;陈大鑫、贝爽编辑&#xff1a;青暮转自&#xff1a;AI科技评论日前&#xff0c;吴恩达在圣诞节之际回顾了2020年AI的一些重大事件&#xff0c;包括AI应对新冠疫情、数据集存在种族偏见、对抗虚假信息算法、AlphaFold预测蛋白质三维结构、…

java工程师的一生_百看不厌之一张图诠释程序员的一生

原标题&#xff1a;百看不厌之一张图诠释程序员的一生01百看不厌系列之一张图诠释程序员的一生。02变得越来越强了...03不知道是干什么的&#xff0c;但又不敢删。。。04当前端的人抱怨Java 时&#xff0c;C程序员05给产品经理设计了一款趁手的宝贝06离职程序员交接项目07这位压…

好久没玩laravel了,5.6玩下(三)

好久没玩laravel了&#xff0c;5.6玩下&#xff08;三&#xff09; 好了&#xff0c;基础的测试通了&#xff0c;咱们开始增删改了 思路整理 先创建项目功能控制器 然后设置路由访问规则 然后开发项目的增删改功能 1 先创建项目的控制器 php artisan make:controller ProjectsC…

Leetcode--870. 优势洗牌

给定两个大小相等的数组 A 和 B&#xff0c;A 相对于 B 的优势可以用满足 A[i] > B[i] 的索引 i 的数目来描述。 返回 A 的任意排列&#xff0c;使其相对于 B 的优势最大化。 示例 1&#xff1a; 输入&#xff1a;A [2,7,11,15], B [1,10,4,11] 输出&#xff1a;[2,11,7…

OpenAI祭出120亿参数魔法模型!从文本合成图像栩栩如生,仿佛拥有人类的语言想象力...

来源&#xff1a;AI科技评论作者&#xff1a;OpenAI编译&#xff1a;贝爽、陈大鑫前几个月GPT-3刚刚问世的时候&#xff0c;能够根据一段话就写出一个小说、一段哲学语录&#xff0c;就足以令AI圈为之感到兴奋。然而2020年刚刚开始没多久&#xff0c;OpenAI又实现一重大突破&am…

java 关键字 sizeof_Java 基本数据类型 sizeof 功能

这是一个程序&#xff0c;java中没有现成的sizeof的实现&#xff0c;原因主要是java中的基本数据类型的大小都是固定的&#xff0c;所以看上去没有必要用sizeof这个关键字。实现的想法是这样的&#xff1a;java.lang.Runtime类中有一些简单的能涉及到内存管理的函数&#xff1a…

MySQL快速生成连续整数

很多时候需要用到连续的id进行数据对比&#xff0c;如判断是否连续等问题。那么&#xff0c;生成连续整数的方式有多种&#xff0c;首先容易想到的是逐步循环&#xff0c;如果想生成1kw条记录&#xff0c;则需要循环1kw次进行插入&#xff0c;那么有没有其他方式呢&#xff0c;…

MySQL小问题:The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents...

这是因为时区设置不对 问题背景&#xff1a; 在运行storm项目&#xff0c;进行页面显示的时候&#xff0c;报错&#xff1a; java.sql.SQLException: The server time zone value is unrecognized or represents more than one time zone. 这是时区的问题。 我采用的第一个…

中国电子信息工程科技发展十四大趋势(2021)

来源&#xff1a;科技日报、中国电子报&#xff08;转载请注明来源&#xff09;编辑&#xff1a;蒲蒲1月5日&#xff0c;中国工程院信息与电子工程学部、中国信息与电子工程科技发展战略研究中心发布“中国电子信息工程科技发展十四大趋势&#xff08;2021&#xff09;”&#…

rosserial_java_[学习笔记]Rosserial实现Windows-ROS交互操作(1)

安装sudo apt-get install ros-indigo-rosserial-windowssudo apt-get install ros-indigo-rosserial-server编译rosrun rosserial_windows make_libraries.py my_library运行后会产生一个my_library文件夹&#xff0c;在my_library这个文件夹下会生成ros_lib文件夹Windows下创…

Chapter 4 Invitations——25

"So you are trying to irritate me to death? Since Tylers van didnt do the job?" "所以你想要把我气死&#xff1f;因为Tyler的卡车没有做到对不&#xff1f;" Anger flashed in his tawny eyes. His lips pressed into a hard line, all signs of h…

Leetcode--122. 买卖股票的最佳时机Ⅱ

给定一个数组&#xff0c;它的第 i 个元素是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易&#xff08;多次买卖一支股票&#xff09;。 注意&#xff1a;你不能同时参与多笔交易&#xff08;你必须在再次购买前出售掉…

语法树的画法(根据文法求字符串)

目录 1.语法树的画法 2.语法树的短语 3.直接短语&#xff08;直接到根部&#xff09; 4.素短语 5.句柄 6.算符优先分析句型 1.语法树的画法 文法G[E]:E->EE | E*E | (E) | i ,字符串 ii*i 推导方式有两种最左推导和最右推导&#xff08;推导的技巧就是逐步靠近字符串…

AI专家喋喋不休展开争论 为什么说预测是智能的本质

来源&#xff1a; 网易智能编译&#xff1a;网易智能 选自&#xff1a;medium参与:Rosie【网易智能讯 6月22日消息】机器学习和智能都植根于预测&#xff0c;这是巧合吗&#xff1f;当我们的技术体现了智能的本质时&#xff0c;我们正在接近一个紧要关头吗&#xff1f;或者说我…

java获取数据库连接语句_JAVA连接数据库语句

Class.forName(驱动字符串)Connection connectionDriverManager.getConnection(连接字符串)SQL 20001 通用的JDBC-ODBC桥连接驱动字符串 sun.jdbc.odbc.JdbcOdbcDriver连接字符串 JDBC:ODBC:数据源名2通过JDBC的纯连接驱动字符串 com.microsoft.jdbc.sqlserver.SQLServerDri…

认识Windows Communication Foundation

好久没有写博客&#xff0c;作为一个程序员&#xff0c;我居然习惯了不写博客。也难怪这些年来&#xff0c;一直原地踏步&#xff0c;无所长进。真是一份付出一份收获&#xff0c;种瓜得瓜&#xff0c;种豆得豆。 Windows Communication Foundation 是一种非常实用、非常强大…

Leetcode--714. 买卖股票的最佳时间含手续费

给定一个整数数组 prices&#xff0c;其中第 i 个元素代表了第 i 天的股票价格 &#xff1b;非负整数 fee 代表了交易股票的手续费用。 你可以无限次地完成交易&#xff0c;但是你每次交易都需要付手续费。如果你已经购买了一个股票&#xff0c;在卖出它之前你就不能再继续购买…