
Inline adoc files when they are included exactly once. Also fix language tags because this inlining gives us better information on what language the code is written in.
80 lines
1.9 KiB
Plaintext
80 lines
1.9 KiB
Plaintext
== Why is this an issue?
|
|
|
|
When directly subclassing ``++java.io.InputStream++`` or ``++java.io.FilterInputStream++``, the only requirement is that you implement the method ``++read()++``. However most uses for such streams don't read a single byte at a time and the default implementation for ``++read(byte[],int,int)++`` will call ``++read(int)++`` for every single byte in the array which can create a lot of overhead and is utterly inefficient. It is therefore strongly recommended that subclasses provide an efficient implementation of ``++read(byte[],int,int)++``.
|
|
|
|
|
|
This rule raises an issue when a direct subclass of ``++java.io.InputStream++`` or ``++java.io.FilterInputStream++`` doesn't provide an override of ``++read(byte[],int,int)++``.
|
|
|
|
|
|
=== Noncompliant code example
|
|
|
|
[source,java]
|
|
----
|
|
public class MyInputStream extends java.io.InputStream {
|
|
private FileInputStream fin;
|
|
|
|
public MyInputStream(File file) throws IOException {
|
|
fin = new FileInputStream(file);
|
|
}
|
|
|
|
@Override
|
|
public int read() throws IOException {
|
|
return fin.read();
|
|
}
|
|
}
|
|
----
|
|
|
|
|
|
=== Compliant solution
|
|
|
|
[source,java]
|
|
----
|
|
public class MyInputStream extends java.io.InputStream {
|
|
private FileInputStream fin;
|
|
|
|
public MyInputStream(File file) throws IOException {
|
|
fin = new FileInputStream(file);
|
|
}
|
|
|
|
@Override
|
|
public int read() throws IOException {
|
|
return fin.read();
|
|
}
|
|
|
|
@Override
|
|
public int read(byte[] b, int off, int len) throws IOException {
|
|
return fin.read(b, off, len);
|
|
}
|
|
}
|
|
----
|
|
|
|
|
|
=== Exceptions
|
|
|
|
This rule doesn't raise an issue when the class is declared ``++abstract++``.
|
|
|
|
|
|
ifdef::env-github,rspecator-view[]
|
|
|
|
'''
|
|
== Implementation Specification
|
|
(visible only on this page)
|
|
|
|
=== Message
|
|
|
|
* Provide an override of "read(byte[],int,int)" for this class.
|
|
|
|
|
|
=== Highlighting
|
|
|
|
Class name declaration
|
|
|
|
|
|
'''
|
|
== Comments And Links
|
|
(visible only on this page)
|
|
|
|
=== relates to: S4349
|
|
|
|
endif::env-github,rspecator-view[]
|