java中,ImputStream类中的read(byte []b)方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中,ImputStream类中的read(byte []b)方法相关的知识,希望对你有一定的参考价值。
我不是很明白这个方法,解释是这样的“读取输入流中的字节数部分,并将其存储在缓冲区数组b”。但我还是不怎么明白这个方法。方法不是对象调用它,然后传入参数,返回数据吗?这里传入是的是一个byte[]数组,返回类型是int类型。但是为什么能把方法外定义的byte[]数组的内容改变了?我很疑惑的地方就是这里,一直想不通诶。请前辈们指点迷津一下,不胜感激!!!
read(byte[] b) :
从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。以整数形式返回实际读取的字节数。在输入数据可用、检测到文件末尾或者抛出异常前,此方法一直阻塞。如果 b 的长度为 0,则不读取任何字节并返回 0;否则,尝试读取至少一个字节。如果因为流位于文件末尾而没有可用的字节,则返回值 -1;否则,至少读取一个字节并将其存储在 b 中。将读取的第一个字节存储在元素 b[0] 中,下一个存储在 b[1] 中,依次类推。读取的字节数最多等于 b 的长度。设 k 为实际读取的字节数;这些字节将存储在 b[0] 到 b[k-1] 的元素中,不影响 b[k] 到 b[b.length-1] 的元素。
举例说明一下:
/**
* User: liuwentao
* Time: 12-1-25 上午10:11
*/
public class InputStreamTest2
public static void main(String[] args)
String path = "D:\\\\project\\\\opensouce\\\\opensouce_demo\\\\base_java\\\\src\\\\demo\\\\java\\\\inputstream\\\\";
File file = new File(path + "xuzhimo.txt");
InputStream inputStream = null;
int i=0;
try
inputStream = new FileInputStream(file);
byte[] bytes = new byte[16];
while ((i = inputStream.read(bytes))!=-1)
String str = new String(bytes);
System.out.print(str);
catch (FileNotFoundException e)
e.printStackTrace();
catch (IOException e)
e.printStackTrace();
运行结果:
以下为read(byte buffer)方法的源代码:
此read(byte[] buffer) 方法调用下面的read(byte[] buffer, int offset, int length)方法
public int read(byte[] buffer) throws IOExceptionreturn read(buffer, 0, buffer.length);
public int read(byte[] buffer, int offset, int length) throws IOException
Arrays.checkOffsetAndCount(buffer.length, offset, length);
//length的长度为buffer.length,也就是字节数组的长度
for (int i = 0; i < length; i++)
int c;
//c==-1说明读到结尾了 方法return
try
if ((c = read()) == -1)
return i == 0 ? -1 : i;
catch (IOException e)
if (i != 0)
return i;
throw e;
//不等于-1 就把这个c赋值给这个字节数组的的一个对应的索引,然后强制转换成char类型
//c是一个字符对应的assic码值
buffer[offset + i] = (byte) c;
return length;
参考技术B 这个是JAVA api里面的内部实现呀,就是他读文件的时候,先把文件流放到你传入的byte数组里面,byte数组是引用类型,他在往里面放东西,byte数组内容当然就改变了,至于返回什么类型,那就是方法随便定义的呀,他返回一个int类型起始就是告诉你文件有没有读取完毕啦,你再仔细看看API说明本回答被提问者和网友采纳 参考技术C 其实,这个byte[]数组相当于工地上的搬运车,把一堆砖块从一个地方转移到另一个地方,用到这个车一次一次的搬运;每次给车装满才能往另一个地方搬运,如果车装满了,返回值为-1; 参考技术D 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。
希望能解决您的问题。
C++ 中温度类的类中的读取方法
【中文标题】C++ 中温度类的类中的读取方法【英文标题】:Read method in classes for Temperature Class in c++ 【发布时间】:2014-04-13 19:19:50 【问题描述】:我正在尝试使用读取方法来读取温度值和华氏度或摄氏度的字符。我在我的编程书中找不到关于 read 方法的任何内容。我还必须在我的主程序中更改我的 for 循环以循环一系列值,但这也不起作用。这是我的代码:
#include <iostream>
using namespace std;
// Interface for Temperature class
class Temperature
public:
Temperature();
Temperature(const Temperature & Temp);
~Temperature();
double getCelsius() const;
double getFahrenheit() const;
void setCelsius(double Temp);
void setFahrenheit(double Temp);
void print();
void read();
private:
static const double ABSOLUTE_ZERO = -273.15;
double CelsiusTemperature;
;
// Implementation of Temperature class
void Temperature::print()
cout << getFahrenheit() << "F = " << getCelsius() << "C\n";
void Temperature::read()
double num;
char C;
cin >> num >> C;
cin >> num >> C;
if (C != 'F' || C != 'f' || C != 'C' || C != 'c')
cout << " ";
Temperature::Temperature()
CelsiusTemperature = 0;
Temperature::Temperature(const Temperature & Temp)
CelsiusTemperature = Temp.CelsiusTemperature;
Temperature::~Temperature()
double Temperature::getCelsius() const
return CelsiusTemperature;
double Temperature::getFahrenheit() const
return 9.0 * CelsiusTemperature / 5.0 + 32.0;
void Temperature::setCelsius(double Temp)
CelsiusTemperature = Temp;
if (CelsiusTemperature < ABSOLUTE_ZERO)
CelsiusTemperature = ABSOLUTE_ZERO;
void Temperature::setFahrenheit(double Temp)
CelsiusTemperature = (Temp - 32.0) * 5.0 / 9.0 ;
if (CelsiusTemperature < ABSOLUTE_ZERO)
CelsiusTemperature = ABSOLUTE_ZERO;
// Program to test Temperature class
int main()
Temperature Start;
Temperature End;
Temperature Temp;
cout << "Enter start temperature: ";
Temp.read();
cout << "Enter end temperature: ";
Temp.read();
cout.precision(3);
for (F = Start; F <= End; F++)
Temperature Temp;
Temp.setFahrenheit(F);
Temp.print();
return 0;
【问题讨论】:
【参考方案1】:有几点:
你没有初始化Start
或End
您的read
函数未设置CelsiusTemperature
你没有声明变量F
您使用相同的 Temp
变量来读取开始和结束温度
您没有为Temperature
类定义任何特定的比较运算符,也没有任何转换运算符将其转换为整数/浮点值,您也没有采用非@ 值的非显式构造函数987654328@
【讨论】:
我应该如何初始化 Start 和 End?以上是关于java中,ImputStream类中的read(byte []b)方法的主要内容,如果未能解决你的问题,请参考以下文章
在Java中,BufferedReader 是一个啥类啊,有啥作用啊
java 输入输出流 一个类中只能使用一次吗? 流关闭后 就不能再打开吗?