字节流(No.2)

基础的小知识:

InputStream OutputStream 字节流的基类(抽象类)

FileInputStream节点流(点对点的意思,例如:FileInputStream fis = new FileInputStream("data.txt");)

FileOutputStream(例如:FileOutputStream fos = new FileOutputStream("result.txt");)

Reader Writer字符流的基类

File帮助输入输出更轻松(类似支撑类)

RandomAccess特点:随机性

一、DataInputStream和DataOutputStream

例子:张三 1元 ,李四 2元 王五 5.5元

如果用InputStream的话要把这些数据读出文件中时,要把张三,李四,王五(字符串);1,2(整型);5.5(浮点型)全部转换成字节存入其中。但是写入的时候将会很复杂,要分清哪些字节是字符串,哪些是整型,哪些是浮点型,然后做相应的转换,然后存入数据。

这个例子用DataOutputStream和DataInputStream来做:

String name[] = {"Tom","Jack","Mary"};

double salary[] = {250,265.7,300.6};

FileOutputStream fos = new FileOutputStream("res/salary");

DataOutputStream dos = new DataOutputStream(fos);

for(int i=0;i<name.length;i++){

dos.writeUTF(name[i]);

dos.writeDouble(salary[i]);

}

fos.close();

dos.close();

//===================================

FileInputStream fis = new FileInputStream("res/salary");

DataInputStream dis = new DataInputStream(fis);

for (int i=0;i<name.length;i++){

System.out.println(dis.readUTF()+" : "+dis.readDouble());

}

fis.close();

dis.close();

二、字节缓冲流

BufferedInputStream和BufferedOutputStream的简单运用

FileOutputStream fos = new FileOutputStream("res/new.txt");//最底层的字节流

BufferedOutputStream bos = new BufferedOutputStream(fos);//封装,缓存输出流

DataOutputStream dos = new DataOutputStream(bos);//数据输出流

dos.writeUTF("good morning!");

dos.writeInt(250);

dos.flush();//强制性的发送到文件中去

dos.close();

bos.close();

fos.close();

FileInputStream fis = new FileInputStream("res/new.txt");

BufferedInputStream bis = new BufferedInputStream(fis);

DataInputStream dis = new DataInputStream(bis);

System.out.println(dis.readUTF() + "\n"+ dis.readInt());

dis.close();

bis.close();

fis.close();

注意:1、在这个小程序中dos.close();bos.close();fos.close();不能写反了{fos.close();bos.close();dos.close();这种是错误的}

2、如果数据不能够流动,可以用dos.flush();来强制性的让它流动。

3、File

Source.txt

Backup/source.txt

执行备份:

判断备份目录是否存在,

如无:

1、 建立目录backup

2、 将源文件复制到backup

如有:

判断是否需要备份

如有必要:

将源文件复制到backup

今天有些小感想,首先对于今天的留下的作业,就是做一个java记事本并且实现保存的功能,记事本做好了,但是这个保存的功能却总也实现不了,心里有一个大概的思路,可是对于知识的认识和运用总是有些欠缺,再加上对于今天老师讲的内容的不理解造成了这般结果,或许是我缺少人们常说的一种天赋,有些人生下来就是做程序员的料,也许我就是不适合的那一批中的。不过还是有些收获的,在网上查了查资料,东拼西凑,再加上自己的那点理解,终于还是完成了这个项目:

public class JiShiTxt implements ActionListener{

Frame f;

MenuBar menubar = new MenuBar();

Menu wenjian;

MenuItem baocun;

TextArea wenben = new TextArea();

FileDialog fd;//创建一个文件对话框,用于加载文件

File file1 = null;//创建一个实例

public JiShiTxt(){

f = new Frame("data");

wenjian = new Menu("文件");

baocun = new MenuItem("保存");

baocun.addActionListener(this);

f.setMenuBar(menubar);

menubar.add(wenjian);

wenjian.add(baocun);

f.add(wenben);

f.setSize(600, 480);

f.setLocation(200, 200);

f.setVisible(true);

f.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

}

public static void main(String[] args) {

new JiShiTxt();

}

public void actionPerformed(ActionEvent e) {

if (e.getSource() == baocun) {

fd = new FileDialog(f, "Save", FileDialog.SAVE);

fd.setVisible(true);

file1 = new File(fd.getDirectory(), fd.getFile());

save(file1);

}

}

public void save(File file1){

try {

FileWriter fw = new FileWriter(file1);

fw.write(wenben.getText());

fw.close();

} catch (Exception e) {

}

}

}

在这段代码中,有我理解的,也有我不理解的,通过查资料我解释了某些代码的意思。虽然收获很少,但是我自己清楚,我尽力了,尽管没有达到预期的结果,我会继续攻克它。

### iOS 中字节流的处理方式 在 iOS 开发中,字节流通常通过 `NSInputStream` 和 `NSOutputStream` 类来进行处理。这些类提供了对数据流的操作支持,类似于 Java 中的 `FileInputStream` 和 `FileOutputStream`[^1]。 #### 使用 NSInputStream 读取字节流 以下是一个简单的示例代码,展示如何使用 `NSInputStream` 来逐字节读取文件的内容: ```objc #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSString *filePath = @"path/to/example.txt"; // 文件路径 NSInputStream *inputStream = [NSInputStream inputStreamWithFileAtPath:filePath]; if (!inputStream) { NSLog(@"无法打开文件"); return -1; } [inputStream open]; // 打开输入流 uint8_t buffer[1]; // 缓冲区大小为1字节 NSInteger bytesRead; while ((bytesRead = [inputStream read:buffer maxLength:1]) > 0) { // 将字节转换为字符并打印 NSLog(@"%c", (char)buffer[0]); } if (bytesRead == -1) { NSError *error = [NSError errorWithDomain:NSCocoaErrorDomain code:[inputStream streamError].code userInfo:nil]; NSLog(@"发生错误: %@", error.localizedDescription); } [inputStream close]; // 关闭输入流 } return 0; } ``` 此代码片段展示了如何创建一个 `NSInputStream` 对象,并从指定文件中逐字节读取内容[^2]。 #### 使用 NSOutputStream 写入字节流 以下是另一个示例,展示如何使用 `NSOutputStream` 向文件写入字节流: ```objc #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSString *filePath = @"path/to/output.txt"; // 输出文件路径 NSOutputStream *outputStream = [NSOutputStream outputStreamToFileAtPath:filePath append:NO]; if (!outputStream) { NSLog(@"无法创建输出流"); return -1; } [outputStream open]; // 打开输出流 const char *dataToWrite = "Hello, World!"; UInt8 bytesWritten = [outputStream write:(const uint8_t *)dataToWrite maxLength:strlen(dataToWrite)]; if (bytesWritten != strlen(dataToWrite)) { NSLog(@"写入失败或部分完成"); } else { NSLog(@"成功写入 %lu 字节的数据", (unsigned long)bytesWritten); } [outputStream close]; // 关闭输出流 } return 0; } ``` 这段代码说明了如何利用 `NSOutputStream` 将字符串作为字节流写入到文件中[^3]。 #### 流的概念与应用场景 如同 Java 的 IO 操作一样,在 iOS 中,“流”也表示一种连续的数据序列传输机制。无论是标准输入输出还是文件读写,都可以视为流的形式存在。对于字节流的应用场景而言,其适合于任何二进制数据的处理需求,而不仅仅是限于文本数据[^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值