forked from PacktPublishing/Java-Coding-Problems
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMain.java
More file actions
143 lines (121 loc) · 5.95 KB
/
Copy pathMain.java
File metadata and controls
143 lines (121 loc) · 5.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
package modern.challenge;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.EnumSet;
public class Main {
public static void main(String[] args) throws IOException {
Path binaryFile = Paths.get("build/classes/modern/challenge/Main.class");
int fileSize = (int) Files.readAttributes(binaryFile, BasicFileAttributes.class).size();
System.out.println("File to read: " + binaryFile.toString());
System.out.println("File size: " + fileSize + " bytes");
System.out.println("Default charset: " + Charset.defaultCharset() + "\n\n");
final byte[] buffer = new byte[fileSize];
System.out.println("Read binary file via InputStream and a buffer:");
System.out.println("----------------------------------------------");
try (InputStream is = new FileInputStream(binaryFile.toString())) {
int i;
while ((i = is.read(buffer)) != -1) {
System.out.println("\nRead: " + i + " bytes");
}
}
System.out.print("Done");
System.out.println("\n\nRead binary file via BufferedInputStream and a buffer:");
System.out.println("----------------------------------------------------------");
try (BufferedInputStream bis = new BufferedInputStream(
new FileInputStream(binaryFile.toFile()))) {
int i;
while ((i = bis.read(buffer)) != -1) {
System.out.println("\nRead: " + i + " bytes");
}
}
System.out.print("Done");
System.out.println("\n\n-------------------------------------------------------");
try (BufferedInputStream bis = new BufferedInputStream(
Files.newInputStream(binaryFile))) {
int i;
while ((i = bis.read(buffer)) != -1) {
System.out.println("\nRead: " + i + " bytes");
}
}
System.out.print("Done");
System.out.println("\n\nRead binary file via ByteArrayInputStream and a buffer:");
System.out.println("-----------------------------------------------------------");
try (ByteArrayInputStream bais = new ByteArrayInputStream(buffer)) {
int i;
while ((i = bais.read(buffer)) != -1) {
System.out.println("\nRead: " + i + " bytes");
}
}
System.out.print("Done");
System.out.println("\n\nRead binary file of floats via DataInputStream:");
System.out.println("---------------------------------------------------\n");
Path dataFile = Paths.get("data.bin");
try (DataInputStream dis = new DataInputStream(new BufferedInputStream(
Files.newInputStream(dataFile)))) {
while (dis.available() > 0) {
float nr = dis.readFloat();
System.out.println("Read: " + nr);
}
}
System.out.println("\n\nRead binary file in memory via Files.readAllBytes():");
System.out.println("--------------------------------------------------------");
byte[] bytes = Files.readAllBytes(binaryFile);
System.out.println("\nRead " + bytes.length + " bytes");
System.out.println("\n\nRead binary file via MappedByteBuffer:");
System.out.println("--------------------------------------------------------");
try (FileChannel fileChannel = (FileChannel.open(binaryFile,
EnumSet.of(StandardOpenOption.READ)))) {
MappedByteBuffer mbBuffer = fileChannel.map(
FileChannel.MapMode.READ_ONLY, 0, fileChannel.size());
System.out.println("\nRead: " + mbBuffer.limit() + " bytes");
}
System.out.println("\n\nWrite binary file via BufferedOutputStream");
System.out.println("----------------------------------------------");
Path classFile1 = Paths.get("Main1.class");
try (BufferedOutputStream bos = new BufferedOutputStream(Files.newOutputStream(
classFile1, StandardOpenOption.CREATE, StandardOpenOption.WRITE))) {
bos.write(buffer);
}
System.out.println("\n\nWrite binary file via Files.write()");
System.out.println("---------------------------------------");
Path classFile2 = Paths.get("Main2.class");
Files.write(classFile2, buffer, StandardOpenOption.CREATE, StandardOpenOption.WRITE);
System.out.println("\n\nWrite binary file via MappedByteBuffer");
System.out.println("---------------------------------------");
Path classFile3 = Paths.get("Main3.class");
try (FileChannel fileChannel = (FileChannel) Files
.newByteChannel(classFile3, EnumSet.of(
StandardOpenOption.CREATE,
StandardOpenOption.READ,
StandardOpenOption.WRITE))) {
MappedByteBuffer mbBuffer = fileChannel
.map(FileChannel.MapMode.READ_WRITE, 0, buffer.length);
if (mbBuffer != null) {
mbBuffer.put(buffer);
}
}
System.out.println("\n\nWrite binary file via DataOutputStream");
System.out.println("------------------------------------------");
Path floatFile = Paths.get("float.bin");
try (DataOutputStream dis = new DataOutputStream(new BufferedOutputStream(
Files.newOutputStream(floatFile)))) {
dis.writeFloat(23.56f);
dis.writeFloat(2.516f);
dis.writeFloat(56.123f);
}
}
}