RFR(JDK11/NIO) 8205058 throw CharacterCodingException --> Re: RFR (JDK11/NIO) 8201276: (fs) Add methods to Files for reading/writing a string from/to a file

Xueming Shen xueming.shen at oracle.com
Tue Jun 26 05:28:16 UTC 2018


Hi Joe,

I would suggest always embed a malformed exception into the iae as showed
below, then the extra flag is no longer needed.

     private static void throwMalformed(int off, int nb) {
           String msg = "malformed input off : " + off + ", length : " + nb;
           throw new IllegalArgumentException(msg, new 
MalformedInputException(nb));
     }

It's an implementation details, so we might be able to get rid of the 
iae later if we
can figure out the better way to pass the malformed exception for both 
ZipCoder/Files
later, without touch the api.

An alternative is to move the iae-catch into StringCoding, with pair of 
similar methods
to throw IOE (to add into the JLA), not sure if it's better though. It 
makes the Files
impl cleaner at least.

-Sherman

On 6/25/18, 9:50 PM, Joe Wang wrote:
> Hi Alan, Sherman,
>
> Here's a version where we, as Sherman suggested, throw an IAE with CCE 
> as the cause. This approach reduces code duplication in SC, although 
> it complicates the impl a little bit with the added parameter and the 
> different behavior between the existing usages of the methods and the 
> new ones. The existing code paths are kept intact so there's no 
> compatibility issue for the existing code.
>
> This version also did not remove the try-catch in Files as Alan 
> suggested earlier.
>
> http://cr.openjdk.java.net/~joehw/jdk11/8205058/webrev02/
>
> Thanks,
> Joe
>
> On 6/25/18, 3:41 PM, Joe Wang wrote:
>> Hi Alan,
>>
>> The test testMalformedRead and testMalformedWrite now expect an 
>> UnmappableCharacterException instead of IOE:
>>
>> webrevs: http://cr.openjdk.java.net/~joehw/jdk11/8205058/webrev01/
>>
>> Thanks,
>> Joe
>>
>> On 6/25/18, 9:48 AM, Joe Wang wrote:
>>>
>>>
>>> On 6/24/18, 12:11 PM, Alan Bateman wrote:
>>>> On 20/06/2018 04:32, Joe Wang wrote:
>>>>> Thanks Alan.  I created 8205058 to capture your suggestions. 
>>>>> Please see below for more details.
>>>>>
>>>>> Changed the internal APIs to throw CCE instead. In the same way as 
>>>>> the previous changeset for 8201276, these methods are made 
>>>>> specific for the use cases (though they are now for 
>>>>> Files.read/writeString only) so that they are not mixed up with 
>>>>> existing ones that may inadvertently affect other usages.
>>>>>
>>>>> One thing to note is that MalformedInputException or 
>>>>> UnmappableCharacterException will lose one piece of information in 
>>>>> comparison to the existing IAE, that is where it happens (offset). 
>>>>> Should there be an improvement in the future, we could consider 
>>>>> add it back to this part of code.
>>>>>
>>>>> JBS: https://bugs.openjdk.java.net/browse/JDK-8205058
>>>>> webrevs: http://cr.openjdk.java.net/~joehw/jdk11/8205058/webrev/
>>>>
>>>> I see your point on MalformedInputException and 
>>>> UnmappableCharacterException so maybe we can submit a new issue to 
>>>> track the follow-on work.
>>>
>>> Submitted: https://bugs.openjdk.java.net/browse/JDK-8205613
>>>
>>>>
>>>> The update means a lot of duplication in StringCoding. Did you 
>>>> consider (or measure) having the private encode/decode methods take 
>>>> a parameter to indicate the exception handling? Sherman might have 
>>>> suggestions on this.
>>>
>>> I did. I didn't like the code duplication at all. But it would be 
>>> even messier if we reuse the code since the previous usage didn't 
>>> declare checked exception, but did capture the position (offset) and 
>>> length information, which means the new method while unnecessary to 
>>> capture these information for Files read/writeString would still 
>>> need to save them in case Exception occurs. Because of the 
>>> complication, I thought you and Sherman would again prefer a 
>>> specific methods than adding parameters (need fields as well).
>>>
>>> Furthermore, in the first round of the review, Sherman mentioned 
>>> that he's been working on an improvement in this area. But I'll wait 
>>> till Sherman could comment on this.
>>>
>>>>
>>>> In the tests, shouldn't testMalformedRead and testMalformedWrite be 
>>>> updated so that expectedExceptions lists the specify exception that 
>>>> is expected? If I read the update correctly then isn't checking for 
>>>> MalformedInputException and UnmappableCharacterException anywhere 
>>>> (it passes if IOException is thrown).
>>>
>>> MalformedInputException and UnmappableCharacterException are 
>>> implementation details, the tests only verified what the spec 
>>> required (IOE).
>>>
>>> -Joe
>>>
>>>>
>>>> -Alan
>>>>



More information about the nio-dev mailing list