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