求解一道 Java 练习题,请喝一杯星巴克 o(╥﹏╥)o

2022-12-30 18:22:41 +08:00
 NanFengXiangWan
2912 次点击
所在节点    程序员
28 条回复
sunjiayao
2022-12-30 18:28:55 +08:00
自己做
yumenawei
2022-12-30 18:30:07 +08:00
哪个学校?这题挺有意思。
给个提示,百度搜下面两个工具类怎么使用。
FileInputStream
FileOutputStream
FurryR
2022-12-30 18:32:19 +08:00
可以试着读取 p1 p2 p3 用 FileInputStream ,splitlog.txt 用 BufferedReader 看看。
并不算一道很难的题目,不过我对 Java 了解不多,不能提供什么帮助。
sunjiayao
2022-12-30 18:41:21 +08:00



试了下并不难,参考 #2 的提示自己想想。
sunjiayao
2022-12-30 18:43:38 +08:00
zchzch1014
2022-12-30 18:52:49 +08:00
我试了一下用 ChatGPT 可以直接生成代码,自己稍改一下就可以用
passer9527
2022-12-30 18:56:43 +08:00
这个挺有意思,我想知道还原后的图片是啥
PTLin
2022-12-30 19:05:36 +08:00
不会 java ,闲的用 rust 写了一个。

```rust
use std::{
error::Error,
fs::File,
io::{Read, Write},
};
fn main() {
run().unwrap();
}
fn run() -> Result<(), Box<dyn Error>> {
let mut out = File::create("out.jpg")?;
let mut files = [
File::open("files/p1")?,
File::open("files/p2")?,
File::open("files/p3")?,
];
let mut buffer = vec![0; 255];
let log = std::fs::read_to_string("files/splitlog.txt")?;
for (l, r) in log.lines().map(|line| {
let mut s = line.split('\t');
let l: usize = s.next().unwrap().parse().unwrap();
let r: usize = s.next().unwrap().parse().unwrap();
(l, r)
}) {
let file = &mut files[l];
let buffer = &mut buffer[..r];
file.read_exact(buffer)?;
out.write_all(buffer)?;
}

Ok(())
}
```
ysc3839
2022-12-30 19:13:13 +08:00
顺手用 C 写了个
```
#include <stdio.h>

int main()
{
FILE* f = fopen("splitlog.txt", "r");

FILE* p[3];
p[0] = fopen("p1", "rb");
p[1] = fopen("p2", "rb");
p[2] = fopen("p3", "rb");

FILE* o = fopen("out", "wb");

while (1)
{
int n = fgetc(f);
if (n != '0' && n != '1' && n != '2')
break;
n -= '0';

int t = fgetc(f);
if (t != '\t')
break;

unsigned char len = 0;
for (size_t i = 0; i < 4; ++i)
{
int c = fgetc(f);
if ('0' <= c && c <= '9')
{
c -= '0';
len *= 10;
len += c;
}
else
{
char buf[255];
fread(buf, 1, len, p[n]);
fwrite(buf, 1, len, o);
break;
}
}
}
}
```
yangcao1122
2022-12-30 19:13:33 +08:00
下载不了
NanFengXiangWan
2022-12-30 19:18:33 +08:00
@yangcao1122 #10 下载地址: https://cowtransfer.com/s/b98c8bccb74f45 口令:68wyp2
yangcao1122
2022-12-30 19:42:59 +08:00
确定合成的图片能打开吗?
KevinBlandy
2022-12-30 20:12:16 +08:00
我尝试用 Java 写了一个,还包含了文件的随机切割和日志文件的生成。

https://springboot.io/t/topic/5065

你也许可以看看,我也不知道有问题没。
passer9527
2022-12-30 20:52:46 +08:00
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class Main {

public static void main(String[] args) throws IOException {
String path = "/Users/ssss/Downloads/Files (1)/";

List<String> lines = Files.readAllLines(Path.of(path + "splitlog.txt"));

Map<Integer, InputStream> inputMap = new HashMap(){{
put(0, new FileInputStream(path + "p1"));
put(1, new FileInputStream(path + "p2"));
put(2, new FileInputStream(path + "p3"));
}};


OutputStream out = new FileOutputStream(path + "out.jpg");

for (String line : lines) {
String[] tmps = line.split("\t");

int fileN = Integer.parseInt(tmps[0]);
int byteN = Integer.parseInt(tmps[1]);

out.write(inputMap.get(fileN).readNBytes(byteN));
}
out.close();
}
}
passer9527
2022-12-30 20:53:27 +08:00
@passer9527 我用的 java17
NanFengXiangWan
2022-12-30 21:59:27 +08:00
@passer9527 #14 老兄请问您有本地测试过么
zhaogaz
2022-12-30 22:03:42 +08:00
这不就是操作流读么
为啥会搞不定,
你说问题,我们解决问题,不要直接要结果。。提升不了的。。。
NanFengXiangWan
2022-12-30 22:04:21 +08:00
@KevinBlandy #13 老兄我是 Java8 的环境,运行时:
java: 无法将类 java.util.Random 中的方法 nextLong 应用到给定类型;
需要: 没有参数
找到: int,long
原因: 实际参数列表和形式参数列表长度不同
NanFengXiangWan
2022-12-30 22:05:42 +08:00
@zhaogaz #17 这道题实在弄不明白,想参考下 V 友给的答案 o(╥﹏╥)o
passer9527
2022-12-30 22:20:18 +08:00
@NanFengXiangWan 本地成功了,java17

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/905654

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX