I datalogi buffer (fra engelsk buffer ), pl. h. buffer [1] [2] , buffere [3] [4] er et hukommelsesområde , der bruges til midlertidig lagring af data under input eller output. Dataudveksling (input og output) kan forekomme både med eksterne enheder og med processer i computeren . Buffere kan implementeres i hardware eller software , men langt de fleste buffere er implementeret i software. Buffere bruges, når der er forskel mellem hastigheden, hvormed data modtages, og hastigheden, hvormed de behandles, eller når disse hastigheder er variable, f.eks. når udskrivning er spoolet.
Disse udtryk udelukker ikke hinanden, og deres funktioner er ofte forvirrede, men der er forskel på deres formål. En buffer er et midlertidigt lager, hvor store datablokke flettes eller opdeles i dele. Dette er nødvendigt for at interagere med en lagerenhed, der arbejder med store datablokke, eller når data overføres i en anden rækkefølge end den, de er dannet i, og det er kun ønskeligt, når brug af små blokke er ineffektivt. Det er fordelagtigt at bruge en buffer, selvom de bufferlagrede data kun skrives til og læses fra bufferen én gang.
Til gengæld indebærer brugen af en cache , at data vil blive læst fra cachen oftere end skrevet der. Dens formål er at reducere antallet af hukommelsesadgange, ikke at gøre dem mere effektive.
Metoden til at organisere dataudveksling mellem enheder eller processer ved hjælp af en buffer kaldes buffering . Et af de bedst kendte eksempler for pc -brugere på denne brug af bufferen er udklipsholderen i Microsoft Windows .
Buffere bruges også i programmering til at modtage data fra funktioner . Windows API - funktioner , der resulterer i en strengværdi (f.eks. MultiByteToWideChar ), tager som et af argumenterne en pointer til bufferen, der skal udlæses. Her er et eksempel på et kildekodestykke af et C -program , der konverterer strengen "Hello, World!" i Unicode :
// kildestreng CHARtext[] = "Hej verden!"; // buffer for at få resultatet WCHAR buffer[256]; // konverter streng til Unicode MultiByteToWideChar(CP_ACP, 0, tekst, strlen(tekst) + 1, buffer, sizeof(buffer)/sizeof(WCHAR));