当前位置:首页 » 硬盘大全 » fis缓存
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

fis缓存

发布时间: 2022-06-26 06:34:29

‘壹’ java 什么叫刷新流的缓冲

流是计算机中用于在两个设备或者库之间传递数据的形式。
以计算机打开一个文档并显示出来为例:
文档实际上是由很多字符构成的集合,而且这些字符间是有顺序的。当你打算打开它的时候,计算机要从硬盘上读取到文件,然后一行一行传给显示设备。你可以想象,系统从文件中由起始位置开始不断取出数据,像水一样通过管道流到显示设备这里。这就是流,确切说这一个是文件流。那么你想,既然流动,就需要管道。我们说管道就是缓冲区。实际上就是将数据先读取到缓冲区,然后显示设备从缓冲区中读取数据。这个概念懂了,咱们说下面的。
显示设备获取数据通常是等缓冲区被填满以后。但是实际上有些时候我们单次想传递的数据并没有缓冲区这么大,那么就需要刷新一下缓存,强制将缓存中的流数据推到显示设备中。
不懂了可以继续追问

‘贰’ Java 多字节文件流

你楼上那个会不会啊?你这个是文件输入流,哪来的length?有什么用》?我知道有length 那个是字节大小,循环遍历是read--------看资料

*
例子:通过字节输入流读取文件信息
*
1、创建字节输入流对象
*
InputStream in = new FileInputStream("d:\\\\aa.txt");
*
2、创建字节数组作为从流中读取数据的容器
*
byte[] bs = new byte[1024];
*
3、循环从流中读取数据
*
while(in.read(bs)!=-1){
*
你要进行的数据操作
*
}
*
4、关闭字节输入流
*
in.close();
*

*
缓存流:给流操作提供缓存器,提高效率
*
创建缓存流对象的语法:
*
InputStream in = new FileInputStream("d:\\\\aa.txt");
*
BufferedInputStream bis = new BufferedInputStream(in);

---不是说循环length是大小,read是读取输出,多练就明白了

import java.io.*;

public class Ztext {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建文件对象
File fs=new File("D:/fs.txt");
FileInputStream fis=null;
try {
//从文件读取到内存
fis=new FileInputStream(fs);
//定义字节数组,以1024为单位读取,可改
byte[] bs = new byte[1024];
//得到实际读取到的字节数,因为事先不知道文件大小
//当为-1的时候跳出死循环
int n = 0;
while((n=fis.read(bs))!=-1){

//把字节转成String 这样可以在控制台输出

String s=new String(bs,0,n);

//可以看看read帮助文档,n代表实际读取

System.out.println(s);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {

fis.close();
} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();
}
}
}

}
-----------------下面是输入到文件-------------------------
import java.io.*;

public class Ztext {

/**
* @param args
*/
public static void main(String[] args) {
File f=new File("d:/fs.txt");
FileOutputStream fs=null;
try{
fs=new FileOutputStream(f);
String s="字符串可从其他地方获得";
//
byte [] bs=new byte[1024];
fs.write(s.getBytes());
System.out.println("成功输入字符到文件");
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
try {

fs.close();
} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();
}
}
}

}
--从一个txt文件读取到另一个txt文件

import java.io.*;

public class Ztext {

/**
* @param args
*/
public static void main(String[] args) {
File f1=new File("d:/fs.txt");
File f2=new File("d:/ss.txt");
FileInputStream fin=null;
FileOutputStream fs=null;
try{
//从fs读取到内存再从内存write到ss
fin=new FileInputStream(f1);
fs=new FileOutputStream(f2);
byte [] bs=new byte[1024];
int n=0;
while((n=fin.read(bs))!=-1){

fs.write(bs);
}
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
try {

fin.close();

fs.close();
} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();
}
}
}

}
--如果你希望输入到文件回车换行可以加\\t\

--最后,后面还有字符对象流不多讲,自己慢慢学,包自己引啊

‘叁’ GHOST 中英文对照表

Ghost的命令行参数一览表

/?或/H: 查看帮助。

-CLONE:克隆。

-IA:对所有分区中的扇区进行映象。

-ID:对整个磁盘(包括未分区空间)进行复制。

-IR:和ID一样,但不将分区调整为扇区界限。

-IB:只复制磁盘的启动扇区。

-IAL:对LINUX分区�
-OR:覆盖空间并进行完整性检查。

-NOLILO:复制后不要试图去修正LILO启动调入器。

-BOOTCD:当使用-SURE直接制作CD-R映象时,期望找到可启动软盘。

-FDSZ:清除目标磁盘上的标志性字节。

-FDSP:保留目标磁盘上的标志性字节。(优先级高于-FSSZ)

-LPM:LPT主并行连接模式。

-LPS:LPT从并行连接模式。

-TCPM:TCP/IP主连接模式。

-TCPS:TCP/IP从连接模式。

-USBM:自动进入USB主模式。

-USBS:自动进入USB从模式。

-JL:记录多点传送会话诊断消息到文件。

-JS:设置最大的多点传送值。

-JA:设置多点传送会话的名称。

-AUTO:不要提示输入文件名,使用默认值。

-CHKIMG:检查映象文件的完整性。

-PWD:指定密码。

-SKIP:指定需要跳过的FAT文件系统中的文件或目录。

-PMBR:当进行任何磁盘复制操作时,保留目标磁盘中的主引导记录。

-SPAN:允许存取多个卷。

-SPLIT:当创建映象时将映象分成数块。

-Z:压缩映象文件。

-F64:当调入旧映象文件时允许64K的簇大小。

-FATLIMIT:防止FAT分区大小超过2兆。

-F32:将FAT16转换为FAT32。

-NTD:允许NTFS内部诊断检查。

-NTC-:禁止NTFS连续簇分配。

-NTCHKDSK:强制CHKDSK在下一个NTFS卷启动。

-NTIC:忽略NTFS卷上的CHKDSK位。

-NTIL:忽略非空的NTFS日志文件检查位。

-NTIID:忽略分区系统标识符的复制。

-TAPEBUFFERED:默认的磁带模式。

-TAPESAFE:当使用旧的或不可靠的磁带时有用。

-TAPESPEED:允许控置磁带速度。

-TAPEUNBUFFERED:强制非缓冲的磁带输入输出。

-TAPEEJECT:强制磁带操作完后弹出。

-TAPEBSIZE:磁带块大小。

-RB:强制复制完成后自动重新启动。

-FX:当完成复制后退出程序。

-QUIET:安静模式。

-SURE:和-CLONE选项一起使用来避免提问。

-BATCH:批处理模式,一切操作由程序自动完成。

-NOFILE:禁止文件询问。

-SCRIPT:自动按照脚本文件中的命令来运行程序。

-DL:指定存在的硬盘号。

-FIS:使用检测出的硬盘最大值。

-FNX:禁止扩展13号中断支持。

-FFX:使用扩展13号中断。

-FNI:禁止直接IDE硬盘存取支持。

-FFI:使用直接IDE硬盘存取。

-FNS:禁止直接ASPI/SCSI硬盘存取支持。

-FFS:使用直接ASPI/SCSI硬盘存取。

-NOSCSI:禁止使用ASPI存取SCSI设备。

-BFC:处理坏的FAT

-VDM:写入前使用使用磁盘校验命令来检查磁盘上的每个扇区。

-FRO:强制即使有坏的簇也继续复制。

-CRC32:使用CRC32校验。

-CRCIGNORE:尽量忽略映象文件中的错误。

-FCR:当建立文件时创建校验文件。

-AFILE:使用指定的中止记录文件。

-DI:显示诊断。

-MEMCHECK:诊断内存。

-DD:记录磁盘信息到GHSTSTAT.TXT。

-DFILE:使用指定的信息日志文件。

-FINGER:显示详细的指纹信息。

-VER:显示程序版本号。

‘肆’ java中date=fis.read())!=-1什么意思

fis应该是FileInputStream的对象。这个涉及IO操作
fis按字节读取某个文件里面的内容(这种情况是是一个字节一个字节的读取,所以你这句话应该是在一个循环里),当读到最后的时候,就会返回-1。
所以如果这是在一个循环里面话,(比如(while(date=fis.read())!=-1)))所以date=fis.read())!=-1表示一个字节一个字节读这个文件,读到最后一个停止。

‘伍’ java字符流的缓存区问题,急

flush应该是刷新缓冲区,也就是缓冲区有一个固定的大小,如果没有达到那个值而又没有加flush是不会及时显示到屏幕的,也就是说其实你read是成功了的,这是我的理解

‘陆’ java中 while ((rs = fis.read(data)) > 0) { dataStr += new String(data, 0, rs); }为何是读取输入流

private static void loadConfig() {
try {
if (!file.exists()) //判断file 文件路径是否存在
file.createNewFile(); //如果不存在,则创建file文件的路径
byte[] data = new byte[64]; //创建一个byte数组,长度为64位
FileInputStream fis = new FileInputStream(file); //创建一个文件的输入流,从file中读取该文件
int rs = 0;
while ((rs = fis.read(data)) > 0) { //把fis流文件以每次最大64的长度写入byte数组中,每次写入的长度为rs,当fis文件写完时,rs会返回-1即,这里的判断会改为 -1 <0从而表示这个文件读取完了退出该while循环
dataStr += new String(data, 0, rs); //把读取的byte数组以从0开始到rs长度的方式转换成字符串追加到dataStr中,注意这里的data是每次循环是从流文件中读取出来的数据,每次都会不一样,举个例子,file 是读取的一个内容为123456789的txt文件,而64位byte每次读取四位长度(这里是例子,实际不是这么长),那么你读取这个文件会循环3次,第一次取出1234放入data中, 把data 加入到dataStr 后,第二次取出5678放入data中, 把data 加入到dataStr 后,第三次取出9放出到dataStr 中, 这里你的流文件全部取完,当第四次循环时rs取不出流文件了,会变成-1从而退出while
}
if (!(dataStr=="")) {
String[] sets = dataStr.split(",");
runCount = Integer.parseInt(sets[0]);
date = sets[1];
os = sets[2];
}
fis.close();
} catch (Exception e) {
e.printStackTrace();
}

以上是关键代码的注释,写的很详细了,不懂的再来问我

‘柒’ java中关于文件创建的问题

问题出在你代码初始顺序上
这是修改后的代码

/*
* 功能
* 演示FileOutStream
* 实现文件的复制粘贴功能
*
*/
import java.io.*;
import java.util.*;

public class OutputStream {
public static void main(String[] args) {
OutputStream ops = new OutputStream();
ops.start();
}

// 构造函数
OutputStream() {
f_r = new File("D:\\eclipse\\11.txt");
f_w = new File("D:\\eclipse\\22.txt");

}
// 开始
void start() {
// 判断被复制的文件是否存在

if (f_r.exists()) {
// 判断用于粘贴的文件是否存在
if (!f_w.exists()) {// 不存在则创建
try {
System.out.println("创建文件!");

f_w.createNewFile();

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
try {
fos = new FileOutputStream(f_w);
fis = new FileInputStream(f_r);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
r = new Read(fis);
w = new Write(fos, r);

System.out.println("开始进行复制粘贴操作!");
// 复制
r.readTo();
// 粘贴
w.toWrite();
System.out.println("操作完成!");
try {
System.out.println(" 关闭文件!");
fos.close();
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
System.out.println("文件不存在!");
}
}

private FileOutputStream fos = null;
private FileInputStream fis = null;
private File f_r = null;// 写入
private File f_w = null;// 读取
private Read r = null;
private Write w = null;
}

// 将数据读出给内存
class Read {
Read(FileInputStream fis) {
this.fis = fis;
st = new Vector<String>();
}

void readTo() {
// 创建缓存
byte b[] = new byte[1024];
// 创建n记录获取数据长度
int n = 0;
try {
// 每次读出1024byte数据
while ((n = fis.read(b)) != -1) {
// 数据转换byte->string
String s = new String(b, 0, n);// 将数据转换为String加入集合
st.add(s);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

Vector<String> st = null;
private FileInputStream fis = null;
}

// 数据从内存写入
class Write {
Write(FileOutputStream fos, Read r) {
this.fos = fos;
this.r = r;
}

void toWrite() {
// 创建缓存
byte b[] = new byte[1024];
// 创建n记录获取数据长度
int n = 0;
for (int i = 0; i < r.st.size(); i++) {
// 获取数据
String s = r.st.get(i);
// 数据转换String->byte
b = s.getBytes();
// 将数据写入文件
try {
fos.write(b);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

Read r = null;
private FileOutputStream fos = null;
}

‘捌’ java后台返回的zip文件损坏,本地缓存中创建的zip是好使的

额,你使用response获取outpustream ous,使用ous作为参数实例化ZipOutputStream zos,然后直接使用zos写入不行吗?

‘玖’ 什么是NCQ谢谢!

NCQ是属于SATA 300规范中的一条,相信看过《揭穿谎言!解析市面上所谓的S-ATA 2》的读者都了解了这一点,它是一项提升硬盘性能的技术,笔者下面来具体解释它。

我们知道硬盘和内存不同,硬盘结构上有很大部分是机械的,其性能一定受到机械部件特性比如马达转速等等的影响,所以硬盘速度始终只能慢慢提高。

我们的硬盘是怎么写数据的?其过程很简单,从磁盘的最外圈开始往内圈写,一个圈叫做一个磁道track,所有碟(platter,即平时说的单碟),面(一个碟可能有两个面)上同一磁道组成一个柱面(cylinder),写硬盘就是按照从外到里一点点顺序写的。可惜我们读取的时候肯定不是按照这样的顺序的,我们一般是随机的读取分散在盘片上的数据,我们需要在快速转动的同时准确定位,可以想象这是多么不容易。

上图中暗红的是就是一个磁道(track),黄色的是扇区(sector)。

要精确定位,我们会遇到两个敌人:寻道延迟和转动延迟。

寻道延迟是磁头找到磁道的时间。我们可以想象一下磁头反复地在一个个同心圆之间伸长,缩短,其延迟就是寻道延迟,或者在硬盘技术参数中称为寻道时间。

要减少寻道时间,一般的做法就是对任务的重新排序。因为如果我们的定位任务按照先来后到的顺序依次进行,那延迟肯定很大。这里可以举一个很好理解的例子。如果3个人同时乘电梯,A先按按钮要到10楼,B要到5楼,C到15楼,如果按照先按先送的顺序,电梯先到10楼,再下来到5楼,又上去到15楼,显然浪费了很多时间,而正常的顺序是从下往上的顺序排列的,这个例子很普通,但是可能大家乘电梯的时候从来不会考虑到吧:)当然寻道时间的优化比这个复杂得多,算法也聪明得多。

转动延迟是找到准确磁道后,那个正确的地址所在位置转到磁头下面的时间。这里我们可以想象转得越快,这个时间就越短,对5400转硬盘,转一圈要11.1毫秒,7200转要8.3毫秒,而万转硬盘只要6毫秒。

要减少转动延迟,一般的办法是提高转速,但是我们知道提高转速很难,否则我们不会到现在还在用7200转的硬盘。除了这个办法还有1.优化排序2.乱序执行。

两个延迟加起来就是我们遇到的总延迟,我们希望总延迟越小越好。以前的做法是优化排序任务从而减少寻道时间,但是后来发现追求最小寻道时间会导致转动延迟变大,两者相加不一定是最小的。所以提出了一种综合考虑寻道和转动的优化方法,这种方法就称为“tagged command queuing”,而在SATA 300标准中使用的特殊的优化方法就叫做“Native Command Queuing”,就是NCQ。

总算说到NCQ了,相信这样解释下来大家一定清楚它就是一种从寻道和转动两方面考虑的,目的在于减少总延迟的优化算法。关于TCQ和NCQ的具体区别和NCQ具体怎么操作就略过了,需要的可以查白皮书。SATA 300规范还引入3种新技术保证NCQ的效率。

Race-Free Status Return

在PATA里,如果控制器没有对硬盘发出下一个命令,硬盘是不能发回之前命令的执行状态的,这会造成额外的延迟。为此,SATA 300免除了这项限制,允许各硬盘端可以随时报告命令执行状态,所以命令执行完毕信息的回报可以达成高度的管道化,甚至做到数个命令同时回传的程度。

Interrupt Aggregation

在DMA传输模式下,硬盘通知传输结束,会引起一个中断(Interrupt),造成延迟。所以SATA 300提供中断聚集机制。如果硬盘同时间内完成多组命令,这些命令完成所引起的中断就可以聚集在一起,大幅减少中断的数目,这对于降低中断延迟有极大的贡献。

First Party DMA(FPDMA)

当PATA的硬盘准备要传输资料时,会发出中断讯号告知控制器,然后控制器对硬盘发出服务命令。当上述动作完成,控制器的驱动程式就进行直接记忆体存取(DMA)通道的设定,这过程会造成不小的延迟。SATA II允许硬盘端自行建立DMA传输通道,不需驱动程式介入,通过DMA setup FIS(Frame Information Block)直接对控制器送出需求通知,DMA引擎就可以进行资料传输。

我们看到这些技术都是尽量减少了命令在控制器和硬盘之间的延迟,使得NCQ对命令的排序更加有效。

http://www.it.com.cn/f/diy/0411/2/42880_1.htm

‘拾’ 请问我的程序为啥每次复制文件都会少一点字节(java代码如下)

因为while里面的fis.read()读了1个
int i;
while((i=fis.read())!=-1){
ops.write(i);
}
一个个读效率很慢的!