1 / 20

Strömmar

Strömmar. Vid läsning och skrivning används något som kallas strömmar. En ström är ett flöde av data som strömmar in eller ut från ett program. Man skiljer på inströmmar och utströmmar.

Download Presentation

Strömmar

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Strömmar • Vid läsning och skrivning används något som kallas strömmar. • En ström är ett flöde av data som strömmar in eller ut från ett program. • Man skiljer på inströmmar och utströmmar. • En ström har en koppling till en fil, en enhet, eller en kommunikationsförbindelse och används för att skriva eller läsa data till denna koppling

  2. Klassen System • Klassen System, i paketet java.lang innehåller tre olika strömmar, definerade som klassvariabler. • System.in • System.out • System.err • System.in är ett statiskt objekt av klassen InputStream. • System.out och System.err är statiska objekt av klassenPrintStream. • Både System.out och System.err brukar vara kopplade mot skärmen, medan System.in brukar vara kopplad mot tangentbordet.

  3. Klassen System import java.io.*;public final class System { //.. . public static final PrintStream err; public static final InputStream in; public static final PrintStream out; //.. . } public abstract class InputStream { //.. . public abstract int read() throws IOException; //.. . } Metoden ”read()” är abstrakt eftersom den måste definieras i en subklass som är kopplad till en faktisk kommunikationskanal, i detta fall till tangentbordet.

  4. Java.io, klasser som läser byteströmmar InputStream SequenceInputStream FileInputStream ByteArrayInputStream PipedInputStream FilterInputStream DataInputStream PushBackInputStream BufferedInputStream

  5. Några metoder i Inputstream • Metoder som läser ett byte eller ett fält av bytenabstract int read() throws IOExeptionOBS! Abstrakt metod. Läser nästa byte och returnerar det som en int.int read(byte[] b) throws IOExeptionLäser ett antal byte till vektorn ”b”. Antalet lästa bytes returneras.int read(byte[] b, int off, int len) throws IOExeption Läser ett antal byte till fältet ”b”.Första byte läggs i ”b[off]”.Maximalt läses ”len” stycken bytes.Antalet lästa bytes returneras.

  6. Java.io, klasser som skriver byteströmmar OutputStream FileOutputStream ByteArrayOutputStream PipedOutputStream FilterOutputStream DataOutputStream PrintStream BufferedOutputStream

  7. Några metoder i Outputstream • Metoder som skriver ett byte eller ett fält av byten i outputstreamabstract void write(int b) throws IOExeptionOBS! Abstrakt metod. Skriver byte ”b” till utströmmenvoid write(byte[] b) throws IOExeptionSkriver ”b.length” byte från vektorn ”b”void write(byte[] b, int off, int len) throws IOExeptionSkriver ett antal byte till fältet ”b”.Första byte som skrivs är ”b[off]”.Totalt skrivs ”len” stycken bytes.

  8. Ett exempel med read() och write() import java.io.*; public class EnklaTecken { public static void main(String[] argument) throws IOException { while ((lästTecken = System.in.read()) >= 0) { System.out.write(lästTecken) ; } } } Utskrift Hur fungerar detta? Hur fungerar detta? Vad ska jag nu skriva.. . Vad ska jag nu skriva.. . Avsluta med <Ctrl-Z> Avsluta med <Ctrl-Z>

  9. Java.io, klassen PrintStream OutputStream FileOutputStream ByteArrayOutputStream PipedOutputStream FilterOutputStream DataOutputStream PrintStream BufferedOutputStream

  10. Några metoder i klassen PrintStream • Några metoder i Klassen PrintStream:Metoder som skriver ett objekt eller variabel av angiven typ till utströmmenprint(Object), print(String), print(char[]), print(char), print(int), print(long), print(float), print(double), print(bolean) Metoder som skriver ett objekt eller variabel av angiven typ till utströmmen och avslutar med ett nyradsteckenprintln(Object), println(String), println(char[]), println(char), println(int), println(long), println(float), println(double), println(bolean) • ExempelSystem.out.print(”Vad heter du: ”);System.out.flush(); • Strängen skrivs inte ut direkt utan mellanlagras i en utdatabuffert. Bufferten kan tömmas med hjälp av metoden flush. Funktionen println flushar bufferten automatiskt.

  11. Ett exempel på läsning från System.in import java.io.*; public class Exempel { static int ettTal; static charettTecken; public static void main(String[] argument) { System.out.print("Skriv ett tecken: "); System.out.flush(); ettTal = System.in.read(); System.out.println("Du skrev ett: " + ettTecken); } } Utskrift Skriv ett tecken: q Du skrev ett: q

  12. System.in (InputStream) (InputStreamReader) MinaInData(BufferedReader) Inläsning • Data som skrivs på tangentbordet hamnar i strömmen System.in som är ett objekt av InputStream i paketet java.io. • Det går inte att direkt läsa från System.in utan den strömmen måste kopplas till en annan ström. • I jdk 1.2 går det dock. • BufferedReader MinaInData = • new BufferedReader( • new InputStreamReader(System.in)); • I klassen BufferedReader finns en metoden readLine.

  13. Ett exempel på inläsning av en hel rad • import java.io.*; • public class Rad • { • public static void main(String[] argument) throws IOException • { • BufferedReader MinaInData = new • BufferedReader(new • InputStreamReader(System.in)); • String namnet; • System.out.print("Vad heter du: "); • System.out.flush(); • namnet = MinaInData.readLine(); • System.out.println("Hej, " + namnet + "!"); • } • } Exempel på exekvering ==> java RadVad heter du: Hans-Edy Mårtensson Hej, Hans-Edy Mårtensson! ==>

  14. Java.io, klasser som läser teckenströmmar Reader PipedReader InputStreamReader CharArrayReader FileReader BufferedReader FilterReader StringReader LineNumberReader PushbackReader

  15. Java.io, klasser som skriver teckenströmmar Writer OutputStreamWriter BufferedWriter FileWriter PipedWriter FilterWriter CharArrayWriter PrintWriter StringWriter

  16. Textfiler • För att läsa eller skriva en fil skall man i Java koppla en ström till filen. • Om man skall hantera binära data så väljer man lämpliga subklasser från superklassena InputStream eller OutputStream. • Om man skall hantera tecken så väljer man lämpliga subklasser från superklassena Reader eller Writer. • Om man vill koppla en fil till en teckenström kan man använda klasserna FileReader eller FileWriter. • I programmet bör man inte läsa direkt från en ström av klassen FileReader, utan i stället via BufferedReader. • På liknade sätt använder man klasserna BufferedWriter och FileWriter vid skrivning till en textfil. • För att få tillgång till metoderna print och println så kan man först låta sin teckenström passera PrintWriter.

  17. Ett exempel på access av textfiler, del 1 • import java.io.*; • public class Kopiera • { • public static void main(String[] argument) • throws IOException, FileNotFoundException • { • //Vi skapar en indataström från tangentbordet • BufferedReader inStrom = • new BufferedReader( • new InputStreamReader(System.in)); • //Vi skapar en teckenström från den fil som ska • //kopieras • System.out.print("Infilens namn? : "); • System.out.flush(); • String filNamnet = inStrom.readLine(); • BufferedReader inFil = • new BufferedReader(new FileReader(filNamnet)); • //Vi skapar en teckenström till den nya kopian • System.out.print("Utfilens namn? : "); • System.out.flush(); • filNamnet = inStrom.readLine(); • PrintWriter utFil = • new PrintWriter( • new BufferedWriter(new FileWriter(filNamnet))); • //Programmet forsätter på nästa sida

  18. Ett exempel på access av textfiler, del 2 //Och nu kopierar vi den ena filen till den andra int n = 0; while (true) { String rad = inFil.readLine(); if (rad == null) break; utFil.println(rad); n++; } utFil.close(); inFil.close(); System.out.println(n + " rader kopierade"); } }

  19. Inläsning av tal • Tyvärr så innehåller inte klassen BufferedReader metoder för att omvandla till strängar till numeriska data. • Det finns flera olika tekniker för att omvandla en sträng till ett tal. Ett sätt beskrivs här nedan. • Omvandlingen kan ske med hjälp av de primitiva datatypernas omslagsklasser (wrappers).String textRad = minaInData.readLine();int mittHeltal = Integer.parseInt(textRad); • I det ovanstående exemplet används metoden parseInt i omslagsklassen Integer för att omvandla strängen textRad till motsvarande heltal. • För att omvandla ett sträng till motsvarande decimaltal måste man gå tillväga på ett något annorlunda sätt.String textRad = minaInData.readLine();int mittDecimaltal = • Double.valueOf(textRad).doubleValue();

  20. Ett exempel på inläsning av tal • import java.io.*; • public class Tal • { • public static void main(String[] argument) • throws IOException • { • BufferedReader MinaInData = • new BufferedReader( • new InputStreamReader(System.in)); • System.out.print("Skriv ett heltal: "); • System.out.flush(); • String textRad = MinaInData.readLine(); • textRad = textRad.trim(); //Rensar bort blanktecken • int helTalet = Integer.parseInt(textRad); • System.out.println("Heltalet är: " + helTalet); • System.out.print("Skriv ett decimaltal: "); • System.out.flush(); • textRad = MinaInData.readLine(); • textRad = textRad.trim(); • double decimalTalet = • Double.valueOf(textRad).doubleValue(); • System.out.println("Decimaltalet är: " + • decimalTalet); • } • }

More Related