Java gebruikt of overschrijft een verouderde API-fout

Hallo, dus dit is mijn code, op de een of andere manier krijg ik nog steeds een fout daar beneden, ik heb de fout beschreven, alle hulp wordt op prijs gesteld. Ik ben niet echt expert in het importeren van dit en vooral API zelf

  import java.io.BufferedInputStream;
    import java.io.DataInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    public class MyClass {
        public static void main(String[] args) throws IOException {
            File file = new File("Sinatra.txt");
            FileInputStream fis = new FileInputStream(file);
            BufferedInputStream bis = new BufferedInputStream(fis);
            DataInputStream dis = new DataInputStream(bis);
            if (dis.available() != 0) {
                // Get the line.
                String s = dis.readLine();
                // Put words to array.
                String[] sParts = s.split(" ");
                // Initialize word longest length.
                int longestLength = 1;
                for (String strx : sParts) { // Go through each sPart, the next one is called strx
                    // If the document has word longer than.
                    if (longestLength < strx.length())
                        // Set new value for longest length.
                        longestLength = strx.length();
                }
                // Because array index from "0".
                int[] counts = new int[longestLength + 1];
                for (String str : sParts) {
                    // Add one to the number of words that length has
                    counts[str.length()] += 1;
                }
                // We use this type of loop since we need the length.
                for (int i = 1; i < counts.length; i++) {
                    System.out.println(i + " letter words: " + counts[i]);
                }
            }
        }
    }
    // Result:
    //        1 letter words: 0
    //        2 letter words: 2
    //        3 letter words: 0
    //        4 letter words: 1
    //        5 letter words: 0
    //        6 letter words: 2
    //        7 letter words: 2
    //        8 letter words: 0
    //        9 letter words: 3

Hallo, dit is mijn code en wanneer ik het probeer te compileren, krijg ik
Fout opgeven:

Note: MyClass.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

Bedankt voor hulp 🙂


Antwoord 1, Autoriteit 100%

Die zijn geen fouten, ze zijn waarschuwing, uw code gecompileerd.

Om deze regels uit te leggen:

Opmerking: myClass.java gebruikt of overschrijft een verouderde API.

U doet een oproep van DataInputStream#readLinedie is verouderd sinds JDK 1.1 volgens de documentatie:

verouderd.
Deze methode converteert niet goed bytes naar
tekens. Vanaf JDK 1.1 is de gewenste manier om de lijnen van de tekst te lezen
via de methode van de bufferedreader.readline (). Programma’s die de
DATAINPUTPUNTREAM-klasse tot leeslijnen kan worden geconverteerd om de
BufferedReader-les door de code van het formulier te vervangen:

DataInputStream d = new DataInputStream(in);   

Met:

BufferedReader d = new BufferedReader(new InputStreamReader(in));

Wat betreft de tweede regel:

Opmerking: hercompileer met -Xlint:deprecation voor details.

Het vertelt je gewoon de optie die je moet gebruiken bij het compileren om meer details te krijgen over waar je verouderde dingen gebruikt.

Bewerken:

Volgens uw opmerking ziet uw code er als volgt uit:

import java.io.InputStreamReader;//Add these two imports
import java.io.BufferedReader;
...
BufferedReader br = new BufferedReader(new InputStreamReader(bis));//Use BufferedReader as suggested by the doc instead of DataInputStream
...
String s = br.readLine();//Read with the non-deprecated readLine of BufferedReader

Antwoord 2, autoriteit 25%

Uit de DataInputStream API-documentatie:

readLine()

Verouderd.

Deze methode converteert bytes niet correct naar tekens. Vanaf JDK 1.1 is de voorkeursmanier om tekstregels te lezen via de BufferedReader.readLine()-methode. Programma’s die de DataInputStream-klasse gebruiken om regels te lezen, kunnen worden geconverteerd om de BufferedReader-klasse te gebruiken door de code van het formulier te vervangen:

DataInputStream d = new DataInputStream(in);

met:
BufferedReader d
= new BufferedReader(new InputStreamReader(in));

Zoals je kunt zien, gebruik je in regel String s = dis.readLine()in je code een verouderde methode. Dit betekent dat er een betere optie is om te doen wat je doet (zoals hierboven aangegeven). Hoewel de methode verouderd is, zal deze in sommige gevallen waarschijnlijk werken. Maar het is niet meer gegarandeerd dat het zijn contract nakomt, en daarom is het beter om de vergelijkbare maar consistente methode BufferedReader.readLine()te gebruiken.

Other episodes