Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/jdk/java/nio/channels/FileChannel/Transfer4GBFile.java
41154 views
1
/*
2
* Copyright (c) 2001, 2017, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
/* @test
25
* @bug 4638365
26
* @summary Test FileChannel.transferFrom and transferTo for 4GB files
27
* @run testng/timeout=300 Transfer4GBFile
28
*/
29
30
import java.io.BufferedWriter;
31
import java.io.File;
32
import java.io.FileInputStream;
33
import java.io.FileOutputStream;
34
import java.io.IOException;
35
import java.io.OutputStreamWriter;
36
import java.io.PrintStream;
37
import java.io.RandomAccessFile;
38
import java.nio.ByteBuffer;
39
import java.nio.channels.FileChannel;
40
import java.nio.file.StandardOpenOption;
41
import java.nio.file.FileAlreadyExistsException;
42
import java.util.concurrent.TimeUnit;
43
44
import org.testng.annotations.Test;
45
46
public class Transfer4GBFile {
47
48
private static PrintStream err = System.err;
49
private static PrintStream out = System.out;
50
51
// Test transferTo with large file
52
@Test
53
public void xferTest04() throws Exception { // for bug 4638365
54
File source = File.createTempFile("blah", null);
55
source.deleteOnExit();
56
long testSize = ((long)Integer.MAX_VALUE) * 2;
57
initTestFile(source, 10);
58
RandomAccessFile raf = new RandomAccessFile(source, "rw");
59
FileChannel fc = raf.getChannel();
60
out.println(" Writing large file...");
61
long t0 = System.nanoTime();
62
fc.write(ByteBuffer.wrap("Use the source!".getBytes()), testSize - 40);
63
long t1 = System.nanoTime();
64
out.printf(" Wrote large file in %d ns (%d ms) %n",
65
t1 - t0, TimeUnit.NANOSECONDS.toMillis(t1 - t0));
66
67
fc.close();
68
raf.close();
69
70
File sink = File.createTempFile("sink", null);
71
sink.deleteOnExit();
72
73
FileInputStream fis = new FileInputStream(source);
74
FileChannel sourceChannel = fis.getChannel();
75
76
raf = new RandomAccessFile(sink, "rw");
77
FileChannel sinkChannel = raf.getChannel();
78
79
long bytesWritten = sourceChannel.transferTo(testSize -40, 10,
80
sinkChannel);
81
if (bytesWritten != 10) {
82
throw new RuntimeException("Transfer test 4 failed " +
83
bytesWritten);
84
}
85
sourceChannel.close();
86
sinkChannel.close();
87
88
source.delete();
89
sink.delete();
90
}
91
92
// Test transferFrom with large file
93
@Test
94
public void xferTest05() throws Exception { // for bug 4638365
95
// Create a source file & large sink file for the test
96
File source = File.createTempFile("blech", null);
97
source.deleteOnExit();
98
initTestFile(source, 100);
99
100
// Create the sink file as a sparse file if possible
101
File sink = null;
102
FileChannel fc = null;
103
while (fc == null) {
104
sink = File.createTempFile("sink", null);
105
// re-create as a sparse file
106
sink.delete();
107
try {
108
fc = FileChannel.open(sink.toPath(),
109
StandardOpenOption.CREATE_NEW,
110
StandardOpenOption.WRITE,
111
StandardOpenOption.SPARSE);
112
} catch (FileAlreadyExistsException ignore) {
113
// someone else got it
114
}
115
}
116
sink.deleteOnExit();
117
118
long testSize = ((long)Integer.MAX_VALUE) * 2;
119
try {
120
out.println(" Writing large file...");
121
long t0 = System.nanoTime();
122
fc.write(ByteBuffer.wrap("Use the source!".getBytes()),
123
testSize - 40);
124
long t1 = System.nanoTime();
125
out.printf(" Wrote large file in %d ns (%d ms) %n",
126
t1 - t0, TimeUnit.NANOSECONDS.toMillis(t1 - t0));
127
} catch (IOException e) {
128
// Can't set up the test, abort it
129
err.println("xferTest05 was aborted.");
130
return;
131
} finally {
132
fc.close();
133
}
134
135
// Get new channels for the source and sink and attempt transfer
136
FileChannel sourceChannel = new FileInputStream(source).getChannel();
137
try {
138
FileChannel sinkChannel = new RandomAccessFile(sink, "rw").getChannel();
139
try {
140
long bytesWritten = sinkChannel.transferFrom(sourceChannel,
141
testSize - 40, 10);
142
if (bytesWritten != 10) {
143
throw new RuntimeException("Transfer test 5 failed " +
144
bytesWritten);
145
}
146
} finally {
147
sinkChannel.close();
148
}
149
} finally {
150
sourceChannel.close();
151
}
152
153
source.delete();
154
sink.delete();
155
}
156
157
/**
158
* Creates file blah of specified size in bytes.
159
*/
160
private static void initTestFile(File blah, long size) throws Exception {
161
if (blah.exists())
162
blah.delete();
163
FileOutputStream fos = new FileOutputStream(blah);
164
BufferedWriter awriter
165
= new BufferedWriter(new OutputStreamWriter(fos, "8859_1"));
166
167
for(int i=0; i<size; i++) {
168
awriter.write("e");
169
}
170
awriter.flush();
171
awriter.close();
172
}
173
}
174
175