java的while与c_关于IO流中下while循环句解释:while ((len=fr.read(c))!=-1)

在java中char类型默认使用Unicode编码,一个字符占两个字节,这里与C语言不同

测试代码代码如下:

public class Demo03 {

public static void main(String[] args) throws IOException {

FileReader fr = new FileReader("G:\\My Project\\Java基础学习\\resources\\1.txt");

//字符流以字符为单位,故这里用char

char[] c=new char[8];

int len;

while ((len=fr.read(c))!=-1){

System.out.println("len的值为:"+len);

// new String(c,0,len)意思是从0到len到数组转换为字符串

System.out.println(new String(c,0,len));

}

fr.close();

}

}

在以上程序中,c是char型数组的实例化对象

f7d8e901330e3b199ed06ca9df08b6d2.png

这时数组c得到了倒数第二句

fdf8bc68ce2723a1a1ffec2cad7adda3.png

这是控制台的输出:

5008a89f6e05f188dabc9616ba903683.png

那么read()方法怎么理解呢?

通过read()方法将对象的文本字符(这也包括转义字符)按照数组的长度一次次的赋值给数组元素,返回值为每次赋值后数组中的字节个数,如果数组不为空,有n个元素就返回值为n(这包括了数组满的情况),如果为0个元素则返回-1

如何理解new String(c,0,len)呢?

这个是String类的构造方法,是将数组c中的元素从0到len拼接为一个字符串对象

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码定义了 `DataFolder` 类的 `__getitem__` 方法,用于根据给定的索引 `index` 获取数据集中的某个样本。 方法的实现如下: 1. 首先,通过 while 循环判断当前索引加上树结构节点数量是否超过当前数据集的长度 `self.datalen`。如果超过,则表示当前文件中的数据已经被完全使用,需要加载下一个文件。 2. 在 while 循环中,首先获取下一个文件名 `filename`。 3. 如果当前数据缓冲区 `self.dataBuffer` 不为空,则将其第一个元素中从当前索引开始到末尾的部分复制给列表 `a`。否则,将 `a` 初始化为空列表。 4. 调用加载器 `self.loader(filename)` 并将返回的 `cell` 和 `mat` 赋值给对应的变量。 5. 使用循环遍历 `cell` 的第二个维度,即 `cell.shape[1]`,并在每次迭代中获取 `mat[cell[0, i]]` 的转置结果,并将其减去1。然后,将该结果的最后一维(Pos 维度)中的最后 `levelNumK` 个元素切片出来,并将其添加到列表 `a` 中。 6. 清空数据缓冲区,并将列表 `a` 中的所有元素按垂直方向堆叠起来,形成一个新的数据缓冲区,并将其赋值给 `self.dataBuffer`。 7. 更新数据集的长度 `self.datalen` 为新的数据缓冲区的长度。 8. 增加文件索引 `self.fileIndx` 的值,以加载下一个文件。 9. 将索引 `self.index` 重置为0。 10. 如果文件索引 `self.fileIndx` 超过了文件数量 `self.fileLen`,则将文件索引设置为 `index` 对文件数量取模的结果,以确保循环使用文件。 11. 尝试读取数据缓冲区中从 `self.index` 开始到 `self.index+self.TreePoint` 结束的部分,并将其添加到列表 `img` 中。 12. 将索引 `self.index` 增加树结构节点数量,以便下一次获取样本时可以继续读取数据缓冲区中的下一个部分。 13. 如果定义了数据转换操作 `self.transform`,则将列表 `img` 应用该转换操作。 14. 最后,返回转换后的列表 `img`。 这段代码通过循环加载数据并维护一个数据缓冲区,以实现按需加载数据,同时提供了一些额外的功能来处理数据集的边界情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值