回答編集履歴

4

コメントの加筆

2025/03/14 06:01

投稿

juner
juner

スコア711

test CHANGED
@@ -64,3 +64,11 @@
64
64
  ```
65
65
 
66
66
  https://livecodes.io/?x=id/bs5ddwfa9w2
67
+
68
+ 1GB 読み込んでみましたが特に問題無いです。
69
+
70
+ ちなみに1GBのファイルは次のコマンドで作成しました。
71
+
72
+ ```cmd
73
+ fsutil file createnew file.txt 1073741824
74
+ ```

3

コード例を追加

2025/03/14 05:58

投稿

juner
juner

スコア711

test CHANGED
@@ -11,3 +11,56 @@
11
11
  [Blob: stream() メソッド - Web API | MDN](https://developer.mozilla.org/ja/docs/Web/API/Blob/stream)
12
12
 
13
13
  [TextDecoderStream - Web API | MDN](https://developer.mozilla.org/ja/docs/Web/API/TextDecoderStream)
14
+
15
+ ### 読み込むコード例
16
+
17
+ こんな感じで良いのでは?
18
+
19
+ ```js
20
+ openReadButton.addEventListener("click", openReadStart);
21
+
22
+ /**
23
+ * ファイルの読み込みを実施する関数
24
+ */
25
+ async function openReadStart() {
26
+ const file = await showPicker();
27
+ log(`file: name:${file.name} size:${file.size}`);
28
+ const arrayBuffer = await readToArrayBuffer(file, ({ offset, length }) =>
29
+ log(`read ... ${offset}/${length}`),
30
+ );
31
+ log(`read complete: ${arrayBuffer.byteLength} byte`);
32
+ console.log(arrayBuffer);
33
+ }
34
+
35
+ /**
36
+ * ファイルを選択する
37
+ */
38
+ async function showPicker() {
39
+ const input = document.createElement("input");
40
+ input.type = "file";
41
+ const { resolve, promise } = Promise.withResolvers();
42
+ input.addEventListener("change", resolve);
43
+ input.showPicker();
44
+ await promise;
45
+ return input.files[0];
46
+ }
47
+
48
+ /**
49
+ * ファイルを arrayBuffer に変換する
50
+ */
51
+ async function readToArrayBuffer(file, progress) {
52
+ const array = new ArrayBuffer(file.size, { maxByteLength: file.size });
53
+ array.byteOffset = 0;
54
+ const buffer = new Uint8Array(array);
55
+ let offset = 0;
56
+ const iterator = file.stream();
57
+ for await (const value of iterator) {
58
+ buffer.set(value, offset);
59
+ offset += value.byteLength;
60
+ if (progress) await progress({ offset, length: file.size });
61
+ }
62
+ return buffer.buffer;
63
+ }
64
+ ```
65
+
66
+ https://livecodes.io/?x=id/bs5ddwfa9w2

2

リンクをタイトルに合わせる

2025/03/14 02:50

投稿

juner
juner

スコア711

test CHANGED
@@ -8,4 +8,6 @@
8
8
  console.log(text);
9
9
  ```
10
10
 
11
- https://developer.mozilla.org/ja/docs/Web/API/Blob/stream
11
+ [Blob: stream() メソッド - Web API | MDN](https://developer.mozilla.org/ja/docs/Web/API/Blob/stream)
12
+
13
+ [TextDecoderStream - Web API | MDN](https://developer.mozilla.org/ja/docs/Web/API/TextDecoderStream)

1

シンタックスハイライトブロックの終了漏れ

2025/03/14 02:48

投稿

juner
juner

スコア711

test CHANGED
@@ -6,5 +6,6 @@
6
6
 
7
7
  for await (const text of file.stream().pipeThrough(new TextDecoderStream()))
8
8
  console.log(text);
9
+ ```
9
10
 
10
11
  https://developer.mozilla.org/ja/docs/Web/API/Blob/stream