The max length of a string seems to equal Integer.MAX_VALUE. However, a string literal length in Java is represented by two bytes implying that it cannot be over 65535 bytes. If you try to compile a class with a longer string, an error constant string too long will occur. Sometimes, for example for tests, one needs to use longer String values. Such values can be loaded from a file.
Suppose, a String variable has to be assigned the entire contents of a output.xml file, which contains ~400,000 characters and is saved in the classpath. Method inputStreamToString loads the contents from an InputStream into a String variable:
public class FileUtils {
public String inputStreamToString(InputStream is) throws IOException {
StringBuilder sb = new StringBuilder();
char[] buffer = new char[1024 * 8];
try (BufferedReader in = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8))) {
int length;
while ((length = in.read(buffer)) > -1) {
sb.append(buffer, 0, length);
}
}
return sb.toString();
}
}
A test class:
public class FileUtilsTest {
FileUtils i = new FileUtils();
@Test
public void testInputStreamToStringFromResourceFile() throws IOException {
String resp = i.inputStreamToString(getClass().getResourceAsStream("/output.xml"));
System.out.println(resp.length());// 358,830
assertEquals(resp.length(), 358779);
}
@Test
public void testInputStreamToStringFromString() throws IOException {
System.out.println(Charset.defaultCharset()); // windows-1252
String str = "this is a test string to be converted to InputStream";
String copy = i.inputStreamToString(new ByteArrayInputStream(str.getBytes(StandardCharsets.UTF_8)));
assertEquals(str.length(), copy.length());
}
}
Another sorter possibility:
public String readFileToString(String fileName) throws IOException {
Path filePath = getPathInResources(fileName);
return new String(Files.readAllBytes(filePath), StandardCharsets.UTF_8);
}
How to convert a String to an InputStream
InputStream is=new ByteArrayInputStream(str.getBytes(StandardCharsets.UTF_8));
The code is used in the second test above.
How to save a String to a file
Files.write(Paths.get("src\\test\\resources\\xml0.xml"),str.getBytes(StandardCharsets.UTF_8));
No comments:
Post a Comment