rspec/rules/S4929/java/rule.adoc
Fred Tingaud 16f6c0aecf
Inline adoc when include has no additional value (#1940)
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.
2023-05-25 14:18:12 +02:00

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[]