< prev index next >
src/java.base/share/classes/java/util/jar/Attributes.java
Print this page
rev 53080 : 8066619: Fix deprecation warnings in java.util.jar
Reviewed-by: rriggs, lancea
Contributed-by: philipp.kunz@paratix.ch
@@ -34,10 +34,12 @@
import java.util.Objects;
import java.util.Set;
import sun.util.logging.PlatformLogger;
+import static java.nio.charset.StandardCharsets.UTF_8;
+
/**
* The Attributes class maps Manifest attribute names to associated string
* values. Valid attribute names are case-insensitive, are restricted to
* the ASCII characters in the set [0-9a-zA-Z_-], and cannot exceed 70
* characters in length. There must be a colon and a SPACE after the name;
@@ -296,86 +298,71 @@
/*
* Writes the current attributes to the specified data output stream.
* XXX Need to handle UTF8 values and break up lines longer than 72 bytes
*/
- @SuppressWarnings("deprecation")
- void write(DataOutputStream os) throws IOException {
+ void write(DataOutputStream out) throws IOException {
+ StringBuilder buffer = new StringBuilder(72);
for (Entry<Object, Object> e : entrySet()) {
- StringBuffer buffer = new StringBuffer(
- ((Name) e.getKey()).toString());
+ buffer.setLength(0);
+ buffer.append(e.getKey().toString());
buffer.append(": ");
-
- String value = (String) e.getValue();
- if (value != null) {
- byte[] vb = value.getBytes("UTF8");
- value = new String(vb, 0, 0, vb.length);
- }
- buffer.append(value);
-
- Manifest.make72Safe(buffer);
- buffer.append("\r\n");
- os.writeBytes(buffer.toString());
+ buffer.append(e.getValue());
+ Manifest.println72(out, buffer.toString());
}
- os.writeBytes("\r\n");
+ Manifest.println(out); // empty line after individual section
}
/*
* Writes the current attributes to the specified data output stream,
* make sure to write out the MANIFEST_VERSION or SIGNATURE_VERSION
* attributes first.
*
* XXX Need to handle UTF8 values and break up lines longer than 72 bytes
*/
- @SuppressWarnings("deprecation")
- void writeMain(DataOutputStream out) throws IOException
- {
+ void writeMain(DataOutputStream out) throws IOException {
+ StringBuilder buffer = new StringBuilder(72);
+
// write out the *-Version header first, if it exists
String vername = Name.MANIFEST_VERSION.toString();
String version = getValue(vername);
if (version == null) {
vername = Name.SIGNATURE_VERSION.toString();
version = getValue(vername);
}
if (version != null) {
- out.writeBytes(vername+": "+version+"\r\n");
+ buffer.append(vername);
+ buffer.append(": ");
+ buffer.append(version);
+ out.write(buffer.toString().getBytes(UTF_8));
+ Manifest.println(out);
}
// write out all attributes except for the version
// we wrote out earlier
for (Entry<Object, Object> e : entrySet()) {
String name = ((Name) e.getKey()).toString();
if ((version != null) && !(name.equalsIgnoreCase(vername))) {
-
- StringBuffer buffer = new StringBuffer(name);
+ buffer.setLength(0);
+ buffer.append(name);
buffer.append(": ");
-
- String value = (String) e.getValue();
- if (value != null) {
- byte[] vb = value.getBytes("UTF8");
- value = new String(vb, 0, 0, vb.length);
- }
- buffer.append(value);
-
- Manifest.make72Safe(buffer);
- buffer.append("\r\n");
- out.writeBytes(buffer.toString());
+ buffer.append(e.getValue());
+ Manifest.println72(out, buffer.toString());
}
}
- out.writeBytes("\r\n");
+
+ Manifest.println(out); // empty line after main attributes section
}
/*
* Reads attributes from the specified input stream.
- * XXX Need to handle UTF8 values.
*/
void read(Manifest.FastInputStream is, byte[] lbuf) throws IOException {
read(is, lbuf, null, 0);
}
- @SuppressWarnings("deprecation")
int read(Manifest.FastInputStream is, byte[] lbuf, String filename, int lineNumber) throws IOException {
String name = null, value;
byte[] lastline = null;
int len;
@@ -407,11 +394,11 @@
System.arraycopy(lbuf, 1, buf, lastline.length, len - 1);
if (is.peek() == ' ') {
lastline = buf;
continue;
}
- value = new String(buf, 0, buf.length, "UTF8");
+ value = new String(buf, 0, buf.length, UTF_8);
lastline = null;
} else {
while (lbuf[i++] != ':') {
if (i >= len) {
throw new IOException("invalid header field ("
@@ -420,17 +407,17 @@
}
if (lbuf[i++] != ' ') {
throw new IOException("invalid header field ("
+ Manifest.getErrorPosition(filename, lineNumber) + ")");
}
- name = new String(lbuf, 0, 0, i - 2);
+ name = new String(lbuf, 0, i - 2, UTF_8);
if (is.peek() == ' ') {
lastline = new byte[len - i];
System.arraycopy(lbuf, i, lastline, 0, len - i);
continue;
}
- value = new String(lbuf, i, len - i, "UTF8");
+ value = new String(lbuf, i, len - i, UTF_8);
}
try {
if ((putValue(name, value) != null) && (!lineContinued)) {
PlatformLogger.getLogger("java.util.jar").warning(
"Duplicate name in Manifest: " + name
< prev index next >