提交 46bfc4ba 编写于 作者: C coffeys

Merge

......@@ -123,7 +123,7 @@ public final class String
* Class String is special cased within the Serialization Stream Protocol.
*
* A String instance is written into an ObjectOutputStream according to
* <a href="{@docroot}../platform/serialization/spec/output.html">
* <a href="{@docRoot}/../platform/serialization/spec/output.html">
* Object Serialization Specification, Section 6.2, "Stream Elements"</a>
*/
private static final ObjectStreamField[] serialPersistentFields =
......@@ -1893,7 +1893,7 @@ public final class String
}
/**
* Returns a new string that is a substring of this string. The
* Returns a string that is a substring of this string. The
* substring begins with the character at the specified index and
* extends to the end of this string. <p>
* Examples:
......@@ -1921,7 +1921,7 @@ public final class String
}
/**
* Returns a new string that is a substring of this string. The
* Returns a string that is a substring of this string. The
* substring begins at the specified {@code beginIndex} and
* extends to the character at index {@code endIndex - 1}.
* Thus the length of the substring is {@code endIndex-beginIndex}.
......@@ -1970,6 +1970,7 @@ public final class String
* <blockquote><pre>
* str.substring(begin,&nbsp;end)</pre></blockquote>
*
* @apiNote
* This method is defined so that the {@code String} class can implement
* the {@link CharSequence} interface.
*
......@@ -1993,8 +1994,8 @@ public final class String
* Concatenates the specified string to the end of this string.
* <p>
* If the length of the argument string is {@code 0}, then this
* {@code String} object is returned. Otherwise, a new
* {@code String} object is created, representing a character
* {@code String} object is returned. Otherwise, a
* {@code String} object is returned that represents a character
* sequence that is the concatenation of the character sequence
* represented by this {@code String} object and the character
* sequence represented by the argument string.<p>
......@@ -2021,13 +2022,13 @@ public final class String
}
/**
* Returns a new string resulting from replacing all occurrences of
* Returns a string resulting from replacing all occurrences of
* {@code oldChar} in this string with {@code newChar}.
* <p>
* If the character {@code oldChar} does not occur in the
* character sequence represented by this {@code String} object,
* then a reference to this {@code String} object is returned.
* Otherwise, a new {@code String} object is created that
* Otherwise, a {@code String} object is returned that
* represents a character sequence identical to the character sequence
* represented by this {@code String} object, except that every
* occurrence of {@code oldChar} is replaced by an occurrence
......@@ -2818,8 +2819,8 @@ public final class String
}
/**
* Returns a copy of the string, with leading and trailing whitespace
* omitted.
* Returns a string whose value is this string, with any leading and trailing
* whitespace removed.
* <p>
* If this {@code String} object represents an empty character
* sequence, or the first and last characters of character sequence
......@@ -2828,15 +2829,15 @@ public final class String
* reference to this {@code String} object is returned.
* <p>
* Otherwise, if there is no character with a code greater than
* {@code '\u005Cu0020'} in the string, then a new
* {@code String} object representing an empty string is created
* and returned.
* {@code '\u005Cu0020'} in the string, then a
* {@code String} object representing an empty string is
* returned.
* <p>
* Otherwise, let <i>k</i> be the index of the first character in the
* string whose code is greater than {@code '\u005Cu0020'}, and let
* <i>m</i> be the index of the last character in the string whose code
* is greater than {@code '\u005Cu0020'}. A new {@code String}
* object is created, representing the substring of this string that
* is greater than {@code '\u005Cu0020'}. A {@code String}
* object is returned, representing the substring of this string that
* begins with the character at index <i>k</i> and ends with the
* character at index <i>m</i>-that is, the result of
* {@code this.substring(k, m + 1)}.
......@@ -2844,7 +2845,7 @@ public final class String
* This method may be used to trim whitespace (as defined above) from
* the beginning and end of a string.
*
* @return A copy of this string with leading and trailing white
* @return A string whose value is this string, with any leading and trailing white
* space removed, or this string if it has no leading or
* trailing white space.
*/
......@@ -2981,12 +2982,12 @@ public final class String
/**
* Returns the string representation of the {@code char} array
* argument. The contents of the character array are copied; subsequent
* modification of the character array does not affect the newly
* created string.
* modification of the character array does not affect the returned
* string.
*
* @param data a {@code char} array.
* @return a newly allocated string representing the same sequence of
* characters contained in the character array argument.
* @param data the character array.
* @return a {@code String} that contains the characters of the
* character array.
*/
public static String valueOf(char data[]) {
return new String(data);
......@@ -3000,14 +3001,13 @@ public final class String
* character of the subarray. The {@code count} argument
* specifies the length of the subarray. The contents of the subarray
* are copied; subsequent modification of the character array does not
* affect the newly created string.
* affect the returned string.
*
* @param data the character array.
* @param offset the initial offset into the value of the
* {@code String}.
* @param count the length of the value of the {@code String}.
* @return a string representing the sequence of characters contained
* in the subarray of the character array argument.
* @param offset initial offset of the subarray.
* @param count length of the subarray.
* @return a {@code String} that contains the characters of the
* specified subarray of the character array.
* @exception IndexOutOfBoundsException if {@code offset} is
* negative, or {@code count} is negative, or
* {@code offset+count} is larger than
......@@ -3018,23 +3018,24 @@ public final class String
}
/**
* Returns a String that represents the character sequence in the
* array specified.
* Equivalent to {@link #valueOf(char[], int, int)}.
*
* @param data the character array.
* @param offset initial offset of the subarray.
* @param count length of the subarray.
* @return a {@code String} that contains the characters of the
* specified subarray of the character array.
* @exception IndexOutOfBoundsException if {@code offset} is
* negative, or {@code count} is negative, or
* {@code offset+count} is larger than
* {@code data.length}.
*/
public static String copyValueOf(char data[], int offset, int count) {
// All public String constructors now copy the data.
return new String(data, offset, count);
}
/**
* Returns a String that represents the character sequence in the
* array specified.
* Equivalent to {@link #valueOf(char[])}.
*
* @param data the character array.
* @return a {@code String} that contains the characters of the
......
/*
* Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
......@@ -39,67 +39,57 @@ import java.util.Random;
public class Size {
private static Random generator = new Random();
private static File blah;
public static void main(String[] args) throws Exception {
test1();
test2();
testSmallFile();
testLargeFile();
}
private static void test1() throws Exception {
blah = File.createTempFile("blah", null);
blah.deleteOnExit();
private static void testSmallFile() throws Exception {
File smallFile = new File("smallFileTest");
Random generator = new Random();
for(int i=0; i<100; i++) {
long testSize = generator.nextInt(1000);
initTestFile(blah, testSize);
FileInputStream fis = new FileInputStream(blah);
FileChannel c = fis.getChannel();
if (c.size() != testSize)
throw new RuntimeException("Size failed");
c.close();
fis.close();
initTestFile(smallFile, testSize);
try (FileChannel c = new FileInputStream(smallFile).getChannel()) {
if (c.size() != testSize) {
throw new RuntimeException("Size failed in testSmallFile. "
+ "Expect size " + testSize
+ ", actual size " + c.size());
}
}
}
blah.delete();
smallFile.deleteOnExit();
}
// Test for bug 4563125
private static void test2() throws Exception {
// Windows and Linux can't handle the really large file sizes for a truncate
// or a positional write required by the test for 4563125
String osName = System.getProperty("os.name");
if (osName.startsWith("SunOS") || osName.contains("OS X")) {
blah = File.createTempFile("blah", null);
long testSize = ((long)Integer.MAX_VALUE) * 2;
initTestFile(blah, 10);
RandomAccessFile raf = new RandomAccessFile(blah, "rw");
FileChannel fc = raf.getChannel();
private static void testLargeFile() throws Exception {
File largeFile = new File("largeFileTest");
long testSize = ((long)Integer.MAX_VALUE) * 2;
initTestFile(largeFile, 10);
try (FileChannel fc = new RandomAccessFile(largeFile, "rw").getChannel())
{
fc.size();
fc.map(FileChannel.MapMode.READ_WRITE, testSize, 10);
if (fc.size() != testSize + 10)
throw new RuntimeException("Size failed " + fc.size());
fc.close();
raf.close();
blah.delete();
if (fc.size() != testSize + 10) {
throw new RuntimeException("Size failed in testLargeFile. "
+ "Expect size " + (testSize + 10)
+ ", actual size " + fc.size());
}
}
largeFile.deleteOnExit();
}
/**
* Creates file blah of specified size in bytes.
* Create a file with the specified size in bytes.
*
*/
private static void initTestFile(File blah, long size) throws Exception {
if (blah.exists())
blah.delete();
FileOutputStream fos = new FileOutputStream(blah);
BufferedWriter awriter
= new BufferedWriter(new OutputStreamWriter(fos, "8859_1"));
for(int i=0; i<size; i++) {
awriter.write("e");
private static void initTestFile(File f, long size) throws Exception {
try (BufferedWriter awriter = new BufferedWriter(
new OutputStreamWriter(new FileOutputStream(f), "8859_1")))
{
for(int i=0; i<size; i++) {
awriter.write("e");
}
}
awriter.flush();
awriter.close();
}
}
/*
* Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
......@@ -313,8 +313,14 @@ public class Misc {
acl.add(0, entry);
view.setAcl(acl);
try {
assertTrue(!isWritable(file));
assertTrue(!isExecutable(file));
if (isRoot()) {
// root has all permissions
assertTrue(isWritable(file));
assertTrue(isExecutable(file));
} else {
assertTrue(!isWritable(file));
assertTrue(!isExecutable(file));
}
} finally {
// Restore ACL
acl.remove(0);
......@@ -353,4 +359,12 @@ public class Misc {
if (!okay)
throw new RuntimeException("Assertion Failed");
}
private static boolean isRoot() {
if (System.getProperty("os.name").startsWith("Windows"))
return false;
Path passwd = Paths.get("/etc/passwd");
return Files.isWritable(passwd);
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册