FileOutputStream类的read方法返回值

FileInputStream in=new FileInputStream("F:/Test.txt");
FileOutputStream out=new FileOutputStream("G:/Test.txt");
int b;

    while((b=in.read())!=-1){
        out.write(b);
        System.out.println(b);
    }
    in.close();
    out.close();

以上代码输出
206
210
202
199
186
195
200
203

b不应该是每次读取到的byte个数且为1吗?
对于这段代码中out.write(b)如何理解?说明文档中解释的是将指定字节写入此文件输出流,
为何b会输出上述数值?

2个回答

首先,InputStream和OutputStream是基于字节的文件操作类,写入和读取的都是一个字节的数据。
其次,write操作是写入一个字节的数据,这个数据就是你给的那个int类型的值,它最后以字节为单位,本质就是8个01串写入文件中。
因为文件的本质就是01二进制串,只不过不同的文本编辑器以不同的编码方式解码后呈现给我们的才是可阅读的文本。
你的问题中,write(b)就是将b这个int类型的数值转换成二进制数据写入文件中的,read操作就是每次读取一个字节的01二进制串,然后将其转换为0到255范围内的int类型返回,也就是write写入的那个数。
read的api是这样的:

 Reads a byte of data from this file. The byte is returned as an integer in the range 0 to 255 ({@code 0x00-0x0ff}).

你给出的代码中的read的值就是对应你文件的每一个字节的二进制序列,本质就是你这个文件的内容。
但是这些是我们看不懂的,而你的文件直接呈现的内容是可阅读的文本,这中间就是文本编辑器作了一个映射,将一堆的01二进制序列翻译成对应的字符。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
还是inputstream类的read方法返回值的问题
代码:rnrnimport java.io.*;rnpublic class FileApp rn public static void main(String[] args)rn byte[] buffer=new byte[25];rn tryrn FileInputStream fileIn = new FileInputStream("1.txt");rn int bytes=fileIn.read(buffer);rn System.out.println(bytes);rn rn catch (Exception e)rn System.out.println(e);rn rn rnrnrn1.txt内容为“abc12345678”,read方法以字节数组为参数,结果返回24。把字节数组buffer的长度设为25以上,返回还是24。只有小于25时,返回的值和字节数组的长度才一致。read方法以字节数组为参数时,返回的整形值到底代表什么意思呢?
inputstream类的read方法返回值代表什么意思?
教程上说read返回的是整形数据,可是这个数据代表什么意思呢?rnrnimport java.io.*;rnpublic class FileApp rn public static void main(String[] args)rn byte[] buffer=new byte[2056];rn tryrn FileInputStream fileIn = new FileInputStream("1.txt");rn int bytes=fileIn.read();rn System.out.println(bytes);rn rn catch (Exception e)rn System.out.println(e);rn rn rnrnrn结果得到的是49。rn说明:1.txt的内容是“12345678”
BufferedInputStream的read方法的返回值
BufferedInputStream的一个方法public int read(byte[] b,int off,int len)rnrn当返回-1的时候表示到达文件尾,那这个方法是否还有别的返回值,表示别的含义。rnrn
FileInputStream类与FileOutputStream类
<p>n 本课程采用的开发环境为JDK+Eclipse,从零基础学习者的角度出发,通过通俗易懂的语言、流行有趣的实例,详细地介绍了使用Java 语言进行程序开发需要掌握的知识和技术。全课共分16 章节,包括初识Java、Java 语言基础、流程控制、数组、面向对象编程基础、异常处理、Java 常用类和枚举类型、泛型与集合类及坦克大战游戏等。书中所有知识都结合具体实例进行讲解,设计的程序代码给出了详细的注释,可以使学习轻松领会Java 程序开发的精髓,快速提高开发技能。n</p>n<p>n <img src="https://img-bss.csdn.net/201906200849405804.png" alt="" /></p>
关于java字节流类的read()方法返回值为int的思考
今天群里的小伙伴问了一个问题:为什么字节流类的read()方法返回值为int? 带着问题我去看了一下源码。但是源码中并没有详细的代码,只有private native int read0() throws IOException; 对于这个问题,可能不是很重要,但是很多开发者也没有注意到,但是技多不压身,利人利己吧。 网上搜索了一些资料,大概得出范围值类型为int的理由: read0方法由...
SqlDataReader类的 read 函数判断返回值的问题
下面代码的if语句块中有一个写了“==true”,一个没写,运行的时候没写的可以进入if 语句块,写了的进不去,这是咋回事rn[code=csharp] SqlDataReader dr = cmd.ExecuteReader();rnrn while (true)rn rn if (dr.Read())rn rn //发送短信,表示已经查到日结标记rn FaDuanXin(dr[0].ToString(), dr[1].ToString());rn break;rn rn elsern continue;rn rn[/code]rn[code=csharp] SqlDataReader dr = cmd.ExecuteReader();rnrn while (true)rn rn if (dr.Read()==true)rn rn //发送短信,表示已经查到日结标记rn FaDuanXin(dr[0].ToString(), dr[1].ToString());rn break;rn rn elsern continue;rn rn[/code]
字节流_FileOutputStream类写出
输出字节流: ------------| OutputStream 此抽象类是表示输出字节流的所有类的超类。输出流接受输出字节并将这些字节发送到某个接收器。  ------------------| FileOutputStream 文件输出流是用于将数据写入 File 或 FileDescriptor 的输出流 FileOutputSream使用步骤:     1
关于FileOutputStream类的问题?
FileOutputStream fos=new FileOutputStream("c:\");rn可以要把c:\改成一个虚拟路径吗?,如果不行的话有什么方法把一个文件传递到一个虚拟路径下?rn
CFile类的read方法问题
我以2进制方式,读取一个1M的文件到一个4096 字节的Buf中,我想问的事CFile类的Read() 方法会不会自己调整偏移量,rn也就是我第一读取的是文件从0到4096字节的数据,继续读取的是4097到 8193字节的数据.rn
FileOutputStream类的使用和总结
本课程系统地讲解了Java核心类库和设计,为你的攻城狮之路打下坚实基础。
字符流中read()方法返回值的问题
图片来自知乎。。 这里的n表示文件中字符的长度,当读到结尾即为-1,然后用String()方法,转换为字符串
请教FileOutputStream类问题!
请问下面语句的含义?是定义一个文件还是目录?rnFileOutputStream out=new FileOutputStream("sourcesum")
JAVA IO中read()方法的返回值
以下是不太严谨的个人理解,有错误欢迎指出,共同进步:read()方法的作用是从输入流读取数据的下一个字节,返回的字节的值是一个0~255之间的整数。到达流的末尾返回-1。刚开始我以为这个返回值表示的是所读取的数据的长度,可是之后在一个示例程序中发现这种说法解释不通。我就好奇研究了一下这个返回值到底表示什么。首先要知道什么是字节(Byte)和比特(bit),它们都是计算机信息量的度量单位。 每一个二
请问关于SqlDataReader的Read方法返回值的问题
写了个事件判断用户名和密码,事件代码如下。问题出现在if(dr.Read())这里,请高人指点。rn private void button1_Click(object sender, EventArgs e)rn rn string url = "server=mm\\mssql2005;uid=sa;password=123;database=bookstore";rn SqlConnection con = new SqlConnection(url);rn string sql = " select * from userinfo where usename=' ";rn sql += txt_name.Text + "' and userpassword='" + txt_pwd1.Text + "'";rnrn if (txt_pwd1.Text == txt_pwd2.Text)//判断文本框输入的两次密码是否相符rn rn con.Open();rn SqlCommand cmd = new SqlCommand(sql, con);rn SqlDataReader dr = cmd.ExecuteReader();rn tryrn rn if (dr.Read())//dr.Read()方法不返回True,程序会执行else内的代码,为什么?rn rn MessageBox.Show("登录成功!");rn new fm_main().Show();rn this.Visible = false;rn rn elsern rn MessageBox.Show("登录失败!");rn rn rn rn catch (Exception ee)rn rn MessageBox.Show(ee.Message);rn rn finallyrn rn dr.Close();rn con.Close();rn rn rn elsern rn MessageBox.Show("两次密码不符!");rn rn
java中read()方法返回值解释
最近做作业,读取大数据集,然后做处理分析的项目。当我用fileinputstream流读取文件的时候,然后用fileinputstream.read()方法读取文件的时候,当我查看API的时候,发现read()是读取每个字节,然后返回一个int类型,有没有很纳闷,读取的字节,为什么返回一个int呢?FileInputStream.read()读取一个byte却返回一个int的原因如下:因为字节输入
输入输出流的 read(char[] buff) 方法的返回值?
求助大佬。rn在学习输入输出流,不太了解read()方法的返回值。rn[code=java]import java.io.IOException;rnimport java.io.StringReader;rnrn//介绍已字符串作为节点的节点流,StringReader和StringWriterrn//把字符串的内容放入流中,或者把流的内容放入字符串中(可变字符串:StringBuffer或StringBuilder)rnpublic class StringStream rnrn public static void main(String[] args) rn String string0 = "Good Good Study\nDay Day up!";rn printInfo(string0);rnrn rnrn // 使用StringReader类实现将字符内容在控制台输出rn public static void printInfo(String string) rn // 字符串输入流rn StringReader reader = new StringReader(string);rn // 数组rn char[] buff = new char[1000];rn try rn while ((reader.read(buff)) > 0) rn System.out.print(new String(buff, 0, reader.read(buff)));rn rn reader.close();rn catch (IOException e) rn System.out.println("读取字符串内容失败");rn e.printStackTrace();rn rnrn rnrnrn[/code]rn报错如下:rn[img=https://img-bbs.csdn.net/upload/201801/06/1515231404_212587.jpg][/img]rnrn求助大家,感谢。
write和read返回值详解
write返回值 1、返回值&gt;0 a、等于给定字节数 b、小于给定字节数,有如下几种可能: 底层物理介质上没有足够的空间 创建的文件指定了RLIMIT_FSIZE,也就是指定了文件允许的最大字节数,不能再往其中添加数据 已经写了部分数据,但是被中断信号打断,返回中断打断前写入的字节数 2、返回值=0 如果相应的errno被设定,说明有相应失败情况。如果errno没有被设定,没有...
read函数的返回值的问题
文件大小size_file明显是:17864字节。 为何第一次read返回值是48? 第二次read返回值是0?rnrn代码:rn![图片说明](https://img-ask.csdn.net/upload/201709/21/1505975287_306470.png)rnrnrnrn从属性看文件的大小:rn![图片说明](https://img-ask.csdn.net/upload/201709/21/1505975326_10633.png)rn
FileOutputStream的write方法
[code="java"] FileOutputStream fo = new FileOutputStream("d:/services3.txt");rn try rn fo.write("北京".getBytes());rn catch (IOException e1) rn e1.printStackTrace();rn [/code]rn问题:FileOutputStream是按字节读入输出流的,假设”北京“对应字节为:1 2 3 4,那么输出文件是怎么知道1和2字节组成”北“,3和4字节组成”京“,而不是输出1,2,3,4字节分别对应的ascll码?
SpringMvc Controller类的方法返回值
•Controller控制器,是MVC中的部分C,是部分的原因是因为此处的控制器主要负责功能处理部分: •收集、验证请求参数并绑定到命令对象; •将命令对象交给业务对象,由业务对象处理并返回模型数据; •返回ModelAndView(Model部分是业务对象返回的模型数据,视图部分为逻辑视图名) ; •而DispatcherServlet主要负责整体的控制流程的调度部分: •负责将请求委...
Java中FileOutputStream类的常用方法
FileOutputStream类文件输出流是用于将数据写入 File 或 FileDescriptor 的输出流。(OutputSteam的子类)构造方法public FileOutputStream(File file) throws FileNotFoundException创建一个向指定 File 对象表示的文件中写入数据的文件输出流。public FileOutputStream(Fil...
FileOutputStream
为什么一下两段代码效果一样,哪位高手给解释一下rnrnString filename="C://Users//Administrator//Desktop//极速传输//1.script";rn File file=new File(filename);rn try rn PrintStream printStream = new PrintStream(file);rn System.setOut(printStream);rn catch (FileNotFoundException e) rn rn e.printStackTrace();rn rnString filename="C://Users//Administrator//Desktop//极速传输//1.script";rn File file=new File(filename);rn FileOutputStream fileOutputStream;rn try rn fileOutputStream = new FileOutputStream(file);rn PrintStream printStream = new PrintStream(fileOutputStream);rn System.setOut(printStream);rn catch (FileNotFoundException e) rn rn e.printStackTrace();rn
java中FileOutputStream类的使用
import java.io.*;rnpublic class OutputExa rnrnrn public static void main(String[] args) rn int b;rn byte buffer[]=new byte[100];rn tryrn System.out.println("输入一行文本,并存入磁盘:");rn b=System.in.read(buffer); rn System.out.println(b);rn File f=new File("G://java code/jackxu/src","secret.txt");rn FileOutputStream wf=new FileOutputStream(f);rn rn wf.write(buffer,0,b);rn rn catch(IOException e)rn System.out.println("Error"+e);rn rn rnrnrn rnrnrnrnrn上面的程序实现从键盘输入一行文本并将其存储到文件secret.txt中,rn但是System.out.println("输入一行文本,并存入磁盘:");这儿输出后程序就终止了,这个程序有什么毛病???
FileOutputStream类的概念和基本使用
本课程系统地讲解了Java核心类库和设计,为你的攻城狮之路打下坚实基础。
read()方法
if(de.read())rnrnreturn rnrnelsernrnreturn rnrn我想return 出去一个数字值,把检测到为真的这个记录的ID return 出去
求助关于FileOutputStream的write方法?
为什么这里可以将char类型的写入输出流,我在查询到的方法只有rnwrite(byte[] b),rnwrite(byte[], int off, int len), rnwrite(int b);rn三种?是不是char类型的可以向上传递给int型?求各位高手赐教!rnrnimport java.io.*;rnpublic class FileIornrn public static void main(String[] args)rn rn char ch;rn …………rn tryrn rn …………rn while((ch = (char)System.in.read()) != '#')rn fout.write(ch); // MARK!!!rn ……………… rn catch (FileNotFoundException e)rn rn System.err.println(e.getMessage());rn rn catch (IOException e)rn rn System.out.println(e.toString());rn rn rn
FileOutputStream 中的write()方法问题!
FileInputStream in = new FileInputStream("aaa.txt");rnFileOutputStream out = new FileOutputStream("bbb.txt");rnint c;rnwhile(c=in.read()!=-1) out.write(c); rnrn请问c是int型,out.write(c)的意思是将c的低8位给out,那么aaa.txt的内容为什么会完整的copy 到 bbb.txt文件中呢??
FileStream类Read方法的参数问题。
//VC++rnChar buffer[1024];rnCFile m_FrpInp01File;rnstruct stInp01File stInp01File;rnm_FrpInp01File.Read(buffer,1024); //m_FrpInp01File.Read(&stInp01File,1024);rnrn'VB2005rnDim buffer(1024) as ByternDim m_FrpInp01File As FileStreamrnDim stInp01File as gstInp01File 'gstInp01File为构造体rnm_FrpInp01File.Read(buffer,0,1024) '请问这边怎么改?我想用构造体代替定义为字节的数组rn帮忙看看,谢谢~
InputStream类中的三种read方法
InputStream类以及子类中的Read方法
IPropertyBag::Read Method返回值问题
好奇怪啊。。。为什么IPropertyBag::Read Method 会返回 指定范围(S_OK rnE_POINTER E_INVALIDARG E_FAILrn)外的值?rnrnrn返回值是0x80070002。这个值是程序运行时打印到文件的十六进制rn 搜了下 http://www.0x80070002.net/ 不知是不是和设备冲突有关,不懂啊,求助!rn 哪位大神可以解释下,谢谢了rnrn
FileOutputStream close()方法瓶颈问题
现在要把收到的每个报文记录到单独的文件中,在做压力测试时发,FileOutputStream 中 close()方法执行需要的时间,随着系统持续压力测试时间的增长而增长,最后导致close()执行的时间在整个线程的执行时间占比越来越高,有没有什么方法改变一下这个情况。相关代码如下rn[code="java"]rnpublic static void write(byte[] msg, String fileName) rnrn if (fileName.indexOf(File.separator) != -1) rn String dirPath = fileName.substring(GatewayConstants.ZERO_INT, fileName.lastIndexOf(File.separatorChar));rn createDir(dirPath);rn rnrn FileOutputStream os = null;rn try rn os = new FileOutputStream(createFile(fileName));rn os.write(msg);rn os.flush() ;rn catch (FileNotFoundException e) rn logger.error("fileNotFoundException exception"+fileName, e);rn catch (IOException e) rn logger.error("fileOutputStream closed exception", e);rn finallyrn try rn if(os !=null)rn os.close() ;rn catch (IOException e) rn logger.error("fileOutputStream closed exception", e);rn rn rn rnrn[/code]
头痛问题:编译时出错,FileOutputStream类write方法错误
下面是一段源程序,要实现通过按DigData按钮从sqlserver数据库里提取数据,再把数据写进一个文本文件中存在与源程序相同的目录下,编译的时候出现1个错误(已经标在源程序旁边)FileOutputStream类中的方法write错误,无法解决,还请高手指教:rnrnimport java.awt.*;rnimport java.awt.event.*;rnimport javax.swing.*;rnimport java.sql.*;rnimport java.io.*;rnrnpublic class Prc_c_m extends JFrame implements ActionListenerrnrn JButton buttonDigdata=new JButton("Dig Data");rn JButton buttonUpload=new JButton("UpLoad File");rnrn public Prc_c_m() rn super("Prc_c");rn setSize(360,360);rn setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);rnrn JPanel pane = new JPanel();rn pane.setLayout(new GridLayout(1, 2, 5, 15));rn buttonDigdata.addActionListener(this);rn pane.add(buttonDigdata);rn pane.add(buttonUpload);rn setContentPane(pane);rn rnrn void digData() rn String data = "jdbc:odbc:prc_c";rn try rn Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");rn Connection conn = DriverManager.getConnection(rn data, "sa", "");rn Statement st = conn.createStatement();rn ResultSet rec = st.executeQuery(rn "SELECT * FROM TablePl WHERE Name='a' ORDER BY Id");rnrn try rn FileOutputStream file = new FileOutputStream("prc.txt");rn rn int i=0;rn while (rec.next())rn file.write(rec.getString(++i)); //不能解析的符号,java.io.FileOutputStream类中的方法write错误rn rn file.close();rn catch (IOException e) rn System.out.println("Error -- " + e.toString());rn rnrnrnrn st.close();rn catch (SQLException s) rn System.out.println("SQL Error: " + s.toString() + " "rn + s.getErrorCode() + " " + s.getSQLState());rn catch (Exception e) rn System.out.println("Error: " + e.toString()rn + e.getMessage());rn rn rnrn public void actionPerformed(ActionEvent evt) rn if (evt.getSource() ==buttonDigdata)rn digData();rn rnrn public static void main(String[] arguments) rn Prc_c_m frame = new Prc_c_m();rn frame.pack();rn frame.setVisible(true);rn rnrnrnrnrnrn
read()方法返回值为什么用int不用byte
java的字节输入流可以操作任意类型的文件,如:图片音频等,这些文件底层都是二进制存储的,读取时如果用的是byte,当我们遇到11111111时(-1的原码为10000001,反码11111110,补码11111111,byte用的都是补码形式计算的),系统以为已经读到文件尾了,后面的数据就无法读取,因此用int类型接收。用int接收,会在前面加24个0凑足4字节,写的时候write方法会去掉这2...
java:IO流(read()方法返回值为什么是int)
read()方法读取的是一个字节,为什么返回是int,而不是byte *  因为字节输入流可以操作任意类型的文件,比如图片音频等,这些文件底层都是以二进制形式的存储的,如果每次读取都返回byte,有可能在读到中间的时候遇到111111111,那么这11111111是byte类型的-1,我们的程序是遇到-1就会停止不读了,后面的数据就读不到了,所以在读取的时候用int类型接收,如果11111111会...
ifstream类read失效
最近做数据包的分类,写了一个分类程序,但有一个异常一直没能解决,直接上代码:rnifstream infile;rnofstream outfile;rnrn/********一些操作***********/rnwhile(判断条件)rnrn if(某些条件)rn rn //数据包提取rn char *frame_data = (char *)calloc(packet_len, sizeof(char));rn infile.read(frame_data, packet_len);rn int temp_record = infile.gcount(); //返回上面infile.read成功读取的字节数rn int k = infile.eof();rn outfile.write(frame_data, packet_len);rn continue;rn rn infile.seekg(packet_len, ios::cur);rnrnrn程序段功能:在while循环中,对满足一定条件的数据包进行提取。rn问题描述:成功进行多次后,突然infile.read()读取失败,调用infile.gcount()发现上次读取的字符数为0,但是调用infile.eof()发现还没有到达文件尾。rn还请各位高手帮忙解答~
关于NIO里面SocketChannel read方法 返回值问题
请问:什么情况下返回0,什么情况下返回-1.rnTCP/IP不太熟悉,请教各位,希望详细一点。
Controller类中方法返回值详解
本章基于上一章spring mvc获取请求参数 https://blog.csdn.net/qq_34598667/article/details/84075770 案例 本章主要讲解Controller中方法的返回值的使用类型: ModelAndView void String 逻辑视图名 Redirect重定向 forward转发 ModelAndView Controller类方...
ClassType类的主要功能和equalsIgnoreCase()方法的作用及返回值?
ClassType类的主要功能和equalsIgnoreCase()方法的作用及返回值?  解决: String   temp   =   "Kdd";     if   (temp.equalsIgnoreCase("KDD"))       out.print("ok");         结果:             ok
SpringMVC学习(七)——Controller类的方法返回值
本文所有案例代码的编写均建立在前文SpringMVC学习(六)——SpringMVC高级参数绑定与@RequestMapping注解的案例基础之上,因此希望读者能仔细阅读这篇文章。返回ModelAndViewController类方法中定义ModelAndView对象并返回,对象中可添加model数据、指定view。之前我就已讲过,在此并不过多赘述。返回void在Controller类方法形参上可以
SpringMVC控制类的Controller方法返回值
                            SpringMVC控制类的Controller方法返回值 Controller方法返回值 返回字符串 逻辑视图名 controller方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址。 //指定逻辑视图名,经过视图解析器解析为jsp物理路径:/WEB-INF/jsp/itemList.jsp retur...
相关热词 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法